From e7792e7d799b30195a632d6168eac0d8fc3e9abb Mon Sep 17 00:00:00 2001 From: Thilina Hasantha Date: Mon, 8 Jan 2018 23:13:43 +0100 Subject: [PATCH] Add pear modules, mail and net_smtp via composer (#93) Add pear modules, mail and net_smtp via composer, remove php 5.6 build due to phpunit 6 --- .travis.yml | 9 +- lib/composer/composer.json | 8 +- lib/composer/composer.lock | 1774 +- lib/composer/composer.phar | Bin 1074129 -> 1857625 bytes lib/composer/vendor/autoload.php | 2 +- lib/composer/vendor/bin/export-plural-rules | 1 + .../vendor/bin/export-plural-rules.php | 1 + lib/composer/vendor/bin/phpdoc-md | 17 - lib/composer/vendor/bin/phpunit | 48 +- lib/composer/vendor/bin/robo | 22 +- .../vendor/composer/autoload_classmap.php | 444 +- .../vendor/composer/autoload_files.php | 1 + .../vendor/composer/autoload_namespaces.php | 7 +- .../vendor/composer/autoload_psr4.php | 6 +- .../vendor/composer/autoload_real.php | 18 +- .../vendor/composer/autoload_static.php | 516 +- .../vendor/composer/include_paths.php | 15 + lib/composer/vendor/composer/installed.json | 5182 +- .../annotated-command/.travis.yml | 89 +- .../annotated-command/CHANGELOG.md | 99 +- .../consolidation/annotated-command/README.md | 305 +- .../annotated-command/appveyor.yml | 66 + .../annotated-command/composer.json | 23 +- .../annotated-command/composer.lock | 1069 +- .../annotated-command/infection.json.dist | 11 + .../src/AnnotatedCommand.php | 128 +- .../src/AnnotatedCommandFactory.php | 165 +- .../annotated-command/src/AnnotationData.php | 11 +- .../src/Cache/CacheWrapper.php | 49 + .../annotated-command/src/Cache/NullCache.php | 37 + .../src/Cache/SimpleCacheInterface.php | 35 + .../src/CommandCreationListener.php | 25 + .../annotated-command/src/CommandData.php | 89 +- .../src/CommandFileDiscovery.php | 25 +- .../src/CommandProcessor.php | 77 +- .../src/Events/CustomEventAwareInterface.php | 20 + .../src/Events/CustomEventAwareTrait.php | 29 + .../src/Help/HelpCommand.php | 48 + .../src/Help/HelpDocument.php | 65 + .../src/Help/HelpDocumentAlter.php | 7 + .../CommandEventHookDispatcher.php | 37 + .../Dispatchers/ExtracterHookDispatcher.php | 47 + .../src/Hooks/Dispatchers/HookDispatcher.php | 27 + .../Dispatchers/InitializeHookDispatcher.php | 40 + .../Dispatchers/InteractHookDispatcher.php | 41 + .../Dispatchers/OptionsHookDispatcher.php | 44 + .../ProcessResultHookDispatcher.php | 53 + .../ReplaceCommandHookDispatcher.php | 66 + .../StatusDeterminerHookDispatcher.php | 51 + .../Dispatchers/ValidateHookDispatcher.php | 46 + .../src/Hooks/HookManager.php | 372 +- .../src/Hooks/InitializeHookInterface.php | 2 +- .../src/Options/AlterOptionsCommandEvent.php | 7 + .../Options/PrepareTerminalWidthOption.php | 39 +- .../src/Parser/CommandInfo.php | 257 +- .../src/Parser/CommandInfoDeserializer.php | 87 + .../src/Parser/CommandInfoSerializer.php | 59 + .../src/Parser/DefaultsWithDescriptions.php | 4 +- .../AbstractCommandDocBlockParser.php | 252 - .../Parser/Internal/BespokeDocBlockParser.php | 322 + .../Internal/CommandDocBlockParser2.php | 70 - .../Internal/CommandDocBlockParser3.php | 74 - .../Internal/CommandDocBlockParserFactory.php | 10 +- .../src/Parser/Internal/CsvUtils.php | 49 + .../src/Parser/Internal/DocblockTag.php | 155 + .../Internal/FullyQualifiedClassCache.php | 106 + .../src/Parser/Internal/TagFactory.php | 67 + .../tests/FullyQualifiedClassCacheTests.php | 59 + .../tests/src/ExampleAnnotatedCommand.php | 11 +- .../tests/src/ExampleCommandFile.php | 182 +- .../tests/src/InMemoryCacheStore.php | 50 + .../tests/src/TestTerminal.php | 22 + .../tests/src/alpha/AlphaCommandFile.php | 96 +- .../tests/testAnnotatedCommand.php | 4 +- .../tests/testAnnotatedCommandFactory.php | 361 +- .../tests/testCommandInfo.php | 45 +- .../annotated-command/tests/testFullStack.php | 66 +- .../annotated-command/tests/testHelp.php | 313 + .../vendor/consolidation/config/.editorconfig | 15 + .../vendor/consolidation/config/.gitignore | 3 + .../vendor/consolidation/config/.travis.yml | 38 + .../vendor/consolidation/config/CHANGELOG.md | 30 + .../consolidation/config/CONTRIBUTING.md | 31 + .../vendor/consolidation/config/LICENSE | 8 + .../vendor/consolidation/config/README.md | 210 + .../vendor/consolidation/config/composer.json | 68 + .../vendor/consolidation/config/composer.lock | 1967 + .../consolidation/config/phpunit.xml.dist | 19 + .../consolidation/config/scenarios/install | 28 + .../config/scenarios/symfony2}/.gitignore | 3 +- .../config/scenarios/symfony2/composer.json | 70 + .../config/scenarios/symfony2/src | 1 + .../config/scenarios/symfony2/tests | 1 + .../config/scenarios/symfony4}/.gitignore | 1 - .../config/scenarios/symfony4/composer.json | 70 + .../config/scenarios/symfony4/composer.lock | 1911 + .../config/scenarios/symfony4/src | 1 + .../config/scenarios/symfony4/tests | 1 + .../consolidation/config/src/Config.php | 157 + .../config/src/ConfigInterface.php | 105 + .../GlobalOptionDefaultValuesInterface.php | 10 + .../config/src/Inject/ConfigForCommand.php | 127 + .../config/src/Inject/ConfigForSetters.php | 47 + .../config/src/Loader/ConfigLoader.php | 35 + .../src/Loader/ConfigLoaderInterface.php | 29 + .../config/src/Loader/ConfigProcessor.php | 167 + .../config/src/Loader/YamlConfigLoader.php | 26 + .../config/src/Util/ArrayUtil.php | 75 + .../config/src/Util/ConfigFallback.php | 51 + .../config/src/Util/ConfigGroup.php | 61 + .../config/src/Util/ConfigMerge.php | 34 + .../config/src/Util/ConfigOverlay.php | 203 + .../config/src/Util/EnvConfig.php | 96 + .../config/tests/ConfigForCommandTest.php | 130 + .../config/tests/ConfigForSettersTest.php | 87 + .../config/tests/ConfigGroupTest.php | 91 + .../config/tests/ConfigLoaderTest.php | 29 + .../config/tests/ConfigOverlayTest.php | 168 + .../config/tests/ConfigProcessorTest.php | 152 + .../consolidation/config/tests/ConfigTest.php | 140 + .../config/tests/data/config-1.yml | 3 + .../config/tests/data/config-2.yml | 3 + .../config/tests/data/config-3.yml | 3 + .../config/tests/scripts/install-scenario | 23 + .../config/tests/scripts/prep-dependencies | 66 + .../config/tests/scripts/scenarios | 12 + .../tests/src/ApplyConfigTestTarget.php | 43 + .../config/tests/src/MyFooCommand.php | 47 + .../config/tests/src/TestLoader.php | 36 + .../vendor/consolidation/log/.editorconfig | 15 + .../vendor/consolidation/log/.gitignore | 2 +- .../vendor/consolidation/log/.travis.yml | 47 + .../vendor/consolidation/log/CONTRIBUTING.md | 25 + .../vendor/consolidation/log/README.md | 12 +- .../vendor/consolidation/log/circle.yml | 12 - .../vendor/consolidation/log/composer.json | 9 +- .../vendor/consolidation/log/composer.lock | 1924 + .../vendor/consolidation/log/phpunit.xml.dist | 8 + .../output-formatters/.gitignore | 1 - .../output-formatters/.travis.yml | 31 +- .../output-formatters/CHANGELOG.md | 51 +- .../consolidation/output-formatters/README.md | 7 +- .../output-formatters/appveyor.yml | 68 + .../output-formatters/composer.json | 19 +- .../output-formatters/composer.lock | 2017 + .../output-formatters/composer.windows.lock | 1897 + .../output-formatters/docs/api.md | 687 +- .../src/FormatterManager.php | 6 +- .../src/Formatters/TableFormatter.php | 19 +- .../src/Formatters/XmlFormatter.php | 3 + .../src/Options/FormatterOptions.php | 13 + .../StructuredData/AbstractStructuredList.php | 5 +- .../src/StructuredData/HelpDocument.php | 16 + .../src/StructuredData/ListDataFromKeys.php | 21 + .../src/StructuredData/Xml/XmlSchema.php | 22 +- .../Transformations/DomToArraySimplifier.php | 31 +- .../src/Transformations/PropertyParser.php | 4 +- .../src/Transformations/ReorderFields.php | 3 + .../src/Transformations/WordWrapper.php | 191 +- .../Transformations/Wrap/CalculateWidths.php | 141 + .../src/Transformations/Wrap/ColumnWidths.php | 264 + .../consolidation/output-formatters/test.php | 20 + .../output-formatters/tests/testAPIDocs.php | 4 +- .../tests/testFormatters.php | 256 +- .../robo/.github/issue_template.md | 11 - .../robo/.github/pull_request_template.md | 13 - .../vendor/consolidation/robo/.gitignore | 9 - .../consolidation/robo/.scrutinizer.yml | 3 - .../vendor/consolidation/robo/.travis.yml | 47 - .../vendor/consolidation/robo/CHANGELOG.md | 91 +- .../vendor/consolidation/robo/README.md | 3 +- .../vendor/consolidation/robo/RoboFile.php | 125 +- .../vendor/consolidation/robo/composer.json | 67 +- .../vendor/consolidation/robo/composer.lock | 1822 +- .../consolidation/robo/docs/collections.md | 250 - .../consolidation/robo/docs/extending.md | 191 - .../consolidation/robo/docs/framework.md | 89 - .../robo/docs/getting-started.md | 418 - .../vendor/consolidation/robo/docs/index.md | 24 - .../consolidation/robo/docs/tasks/ApiGen.md | 56 - .../consolidation/robo/docs/tasks/Archive.md | 52 - .../consolidation/robo/docs/tasks/Assets.md | 163 - .../consolidation/robo/docs/tasks/Base.md | 126 - .../consolidation/robo/docs/tasks/Bower.md | 60 - .../consolidation/robo/docs/tasks/Composer.md | 179 - .../robo/docs/tasks/Development.md | 282 - .../consolidation/robo/docs/tasks/Docker.md | 249 - .../consolidation/robo/docs/tasks/File.md | 129 - .../robo/docs/tasks/Filesystem.md | 217 - .../consolidation/robo/docs/tasks/Gulp.md | 31 - .../consolidation/robo/docs/tasks/Npm.md | 54 - .../consolidation/robo/docs/tasks/Remote.md | 143 - .../consolidation/robo/docs/tasks/Testing.md | 171 - .../consolidation/robo/docs/tasks/Vcs.md | 108 - .../consolidation/robo/examples/RoboFile.php | 425 - .../consolidation/robo/examples/robo.script | 44 - lib/composer/vendor/consolidation/robo/robo | 1 + .../vendor/consolidation/robo/robo.yml | 3 + .../consolidation/robo/scenarios/install | 28 + .../robo/scenarios/symfony2/.gitignore | 2 + .../robo/scenarios/symfony2/composer.json | 93 + .../consolidation/robo/scenarios/symfony2/src | 1 + .../robo/scenarios/symfony2/tests/.gitkeep | 1 + .../robo/scenarios/symfony4/.gitignore | 1 + .../robo/scenarios/symfony4/.gitkeep | 1 + .../robo/scenarios/symfony4/composer.json | 93 + .../robo/scenarios/symfony4/composer.lock | 3813 ++ .../consolidation/robo/scenarios/symfony4/src | 1 + .../consolidation/robo/src/Application.php | 21 +- .../robo/src/Collection/CallableTask.php | 13 +- .../robo/src/Collection/Collection.php | 92 +- .../robo/src/Collection/CollectionBuilder.php | 126 +- .../src/Collection/CollectionInterface.php | 3 +- .../Collection/NestedCollectionInterface.php | 3 - .../robo/src/Collection/TaskForEach.php | 2 - .../robo/src/Collection/Temporary.php | 2 - .../robo/src/Common/BuilderAwareTrait.php | 1 - .../robo/src/Common/CommandArguments.php | 33 +- .../robo/src/Common/ConfigAwareTrait.php | 52 +- .../robo/src/Common/ExecCommand.php | 81 +- .../robo/src/Common/ExecTrait.php | 408 + .../consolidation/robo/src/Common/IO.php | 13 +- .../robo/src/Common/OutputAdapter.php | 38 + .../robo/src/Common/ProcessExecutor.php | 51 + .../robo/src/Common/ProcessUtils.php | 79 + .../Common/ProgressIndicatorAwareTrait.php | 11 + .../consolidation/robo/src/Common/TaskIO.php | 6 +- .../src/Common/VerbosityThresholdTrait.php | 79 + .../vendor/consolidation/robo/src/Config.php | 121 +- .../consolidation/robo/src/Config/Config.php | 130 + .../GlobalOptionDefaultValuesInterface.php | 17 + .../src/Contract/ConfigAwareInterface.php | 8 +- .../src/Contract/OutputAdapterInterface.php | 11 + .../Contract/VerbosityThresholdInterface.php | 24 + .../robo/src/GlobalOptionsEventListener.php | 109 +- .../robo/src/Log/ResultPrinter.php | 7 +- .../robo/src/Log/RoboLogStyle.php | 2 - .../consolidation/robo/src/Log/RoboLogger.php | 7 - .../vendor/consolidation/robo/src/Result.php | 28 +- .../consolidation/robo/src/ResultData.php | 72 +- .../vendor/consolidation/robo/src/Robo.php | 83 +- .../vendor/consolidation/robo/src/Runner.php | 72 +- .../robo/src/SelfUpdateCommand.php | 152 + .../consolidation/robo/src/State/Consumer.php | 12 + .../consolidation/robo/src/State/Data.php | 148 + .../robo/src/State/StateAwareInterface.php | 30 + .../robo/src/State/StateAwareTrait.php | 49 + .../robo/src/Task/ApiGen/ApiGen.php | 40 +- .../robo/src/Task/Archive/Extract.php | 2 - .../consolidation/robo/src/Task/Base/Exec.php | 159 +- .../robo/src/Task/Base/ExecStack.php | 3 - .../robo/src/Task/Base/ParallelExec.php | 54 +- .../robo/src/Task/Base/SymfonyCommand.php | 1 - .../robo/src/Task/Base/loadTasks.php | 3 + .../consolidation/robo/src/Task/BaseTask.php | 29 +- .../robo/src/Task/Bower/Install.php | 1 - .../robo/src/Task/Bower/Update.php | 2 - .../robo/src/Task/CommandStack.php | 21 +- .../robo/src/Task/Composer/Base.php | 265 +- .../robo/src/Task/Composer/Config.php | 93 + .../robo/src/Task/Composer/CreateProject.php | 112 + .../robo/src/Task/Composer/DumpAutoload.php | 15 +- .../robo/src/Task/Composer/Init.php | 115 + .../robo/src/Task/Composer/Remove.php | 34 +- .../src/Task/Composer/RequireDependency.php | 50 + .../robo/src/Task/Composer/Validate.php | 69 +- .../robo/src/Task/Composer/loadTasks.php | 40 + .../robo/src/Task/Development/Changelog.php | 101 +- .../Task/Development/GenerateMarkdownDoc.php | 55 +- .../src/Task/Development/GenerateTask.php | 1 - .../robo/src/Task/Development/GitHub.php | 26 +- .../src/Task/Development/GitHubRelease.php | 2 +- .../robo/src/Task/Development/OpenBrowser.php | 2 +- .../robo/src/Task/Development/PackPhar.php | 1 - .../robo/src/Task/Development/SemVer.php | 32 +- .../robo/src/Task/Docker/Base.php | 4 +- .../robo/src/Task/Docker/Exec.php | 10 +- .../robo/src/Task/Docker/Run.php | 28 +- .../robo/src/Task/File/Replace.php | 18 +- .../robo/src/Task/File/TmpFile.php | 7 +- .../robo/src/Task/File/Write.php | 2 - .../robo/src/Task/File/loadTasks.php | 2 - .../robo/src/Task/Filesystem/CopyDir.php | 73 +- .../src/Task/Filesystem/FilesystemStack.php | 22 +- .../robo/src/Task/Filesystem/TmpDir.php | 1 - .../robo/src/Task/Filesystem/WorkDir.php | 2 - .../src/Task/Filesystem/loadShortcuts.php | 7 +- .../robo/src/Task/Filesystem/loadTasks.php | 2 - .../consolidation/robo/src/Task/Gulp/Base.php | 2 +- .../consolidation/robo/src/Task/Gulp/Run.php | 1 - .../robo/src/Task/Remote/Rsync.php | 7 - .../robo/src/Task/Remote/Ssh.php | 11 +- .../consolidation/robo/src/Task/Simulator.php | 1 - .../robo/src/Task/StackBasedTask.php | 4 +- .../robo/src/Task/Testing/Behat.php | 1 - .../robo/src/Task/Testing/Codecept.php | 38 +- .../robo/src/Task/Vcs/GitStack.php | 30 +- .../consolidation/robo/tests/_bootstrap.php | 12 - .../robo/tests/_data/TestedRoboFile.php | 38 - .../robo/tests/_data/TestedRoboTask.php | 61 - .../robo/tests/_data/claypit/a.txt | 1 - .../robo/tests/_data/claypit/b.txt | 1 - .../robo/tests/_data/claypit/box/robo.txt | 1 - .../_data/claypit/some/deeply/existing_file | 1 - .../claypit/some/deeply/nested/structu.re | 1 - .../some_destination/deeply/existing_file | 1 - .../consolidation/robo/tests/_data/dump.sql | 1 - .../robo/tests/_data/parascript.php | 8 - .../consolidation/robo/tests/_data/sample.css | 35 - .../robo/tests/_helpers/CliGuy.php | 30 - .../robo/tests/_helpers/CliHelper.php | 66 - .../robo/tests/_helpers/CodeGuy.php | 26 - .../robo/tests/_helpers/CodeHelper.php | 37 - .../robo/tests/_helpers/SeeInOutputTrait.php | 62 - .../robo/tests/_helpers/TestHelper.php | 10 - .../robo/tests/_helpers/WebHelper.php | 10 - .../consolidation/robo/tests/cli.suite.yml | 3 - .../robo/tests/cli/AssetsCept.php | 24 - .../robo/tests/cli/CleanDirCept.php | 13 - .../robo/tests/cli/CollectionCest.php | 409 - .../robo/tests/cli/ConcatCept.php | 11 - .../robo/tests/cli/CopyDirCept.php | 10 - .../tests/cli/CopyDirOverwritesFilesCept.php | 12 - .../robo/tests/cli/CopyDirRecursiveCept.php | 11 - .../robo/tests/cli/DeleteDirCept.php | 11 - .../consolidation/robo/tests/cli/ExecCest.php | 13 - .../robo/tests/cli/FilesystemStackCest.php | 50 - .../robo/tests/cli/FlattenDirCept.php | 14 - .../robo/tests/cli/FlattenDirParentsCept.php | 12 - .../robo/tests/cli/GenTaskCest.php | 11 - .../tests/cli/GenerateMarkdownDocCest.php | 86 - .../robo/tests/cli/PackExtractCept.php | 57 - .../robo/tests/cli/ShortcutsCest.php | 25 - .../robo/tests/cli/SimulatedCest.php | 34 - .../robo/tests/cli/WriteFileCest.php | 111 - .../robo/tests/cli/_bootstrap.php | 9 - .../robo/tests/src/RoboFileFixture.php | 123 - .../Traits/Common/CommandArgumentsHost.php | 18 - .../consolidation/robo/tests/unit.suite.yml | 8 - .../robo/tests/unit/ApplicationTest.php | 140 - .../unit/Common/CommandArgumentsTest.php | 86 - .../unit/Common/ResourceExistenceChecker.php | 80 - .../robo/tests/unit/ConfigurationTest.php | 40 - .../robo/tests/unit/OutputTest.php | 81 - .../robo/tests/unit/ResultTest.php | 79 - .../robo/tests/unit/RunnerTest.php | 279 - .../robo/tests/unit/Task/ApiGenTest.php | 52 - .../robo/tests/unit/Task/AtoumTest.php | 38 - .../robo/tests/unit/Task/BehatTest.php | 43 - .../robo/tests/unit/Task/BowerTest.php | 59 - .../robo/tests/unit/Task/CodeceptionTest.php | 63 - .../robo/tests/unit/Task/CollectionTest.php | 183 - .../robo/tests/unit/Task/CommandStackTest.php | 26 - .../robo/tests/unit/Task/ComposerTest.php | 266 - .../robo/tests/unit/Task/DockerTest.php | 97 - .../robo/tests/unit/Task/ExecTaskTest.php | 73 - .../robo/tests/unit/Task/GitTest.php | 62 - .../robo/tests/unit/Task/GulpTest.php | 85 - .../robo/tests/unit/Task/HgTest.php | 86 - .../robo/tests/unit/Task/NpmTest.php | 52 - .../robo/tests/unit/Task/PHPServerTest.php | 59 - .../robo/tests/unit/Task/PHPUnitTest.php | 41 - .../robo/tests/unit/Task/ParallelExecTest.php | 43 - .../robo/tests/unit/Task/PhpspecTest.php | 42 - .../robo/tests/unit/Task/RsyncTest.php | 59 - .../robo/tests/unit/Task/SemVerTest.php | 72 - .../robo/tests/unit/Task/SshTest.php | 61 - .../robo/tests/unit/Task/SvnTest.php | 49 - .../robo/tests/unit/_bootstrap.php | 2 - .../container-interop/README.md | 83 +- .../container-interop/composer.json | 4 + .../docs/ContainerInterface-meta.md | 2 +- .../docs/ContainerInterface.md | 33 +- .../docs/Delegate-lookup-meta.md | 14 +- .../container-interop/docs/Delegate-lookup.md | 14 +- .../docs/images/interoperating_containers.png | Bin 35971 -> 25738 bytes .../docs/images/priority.png | Bin 22949 -> 16252 bytes .../docs/images/side_by_side_containers.png | Bin 22519 -> 16265 bytes .../Interop/Container/ContainerInterface.php | 26 +- .../Exception/ContainerException.php | 4 +- .../Container/Exception/NotFoundException.php | 4 +- .../vendor/dflydev/dot-access-data/.gitignore | 2 + .../dflydev/dot-access-data/.travis.yml | 13 + .../vendor/dflydev/dot-access-data/LICENSE | 19 + .../vendor/dflydev/dot-access-data/README.md | 118 + .../dflydev/dot-access-data/composer.json | 38 + .../dflydev/dot-access-data/phpunit.xml.dist | 14 + .../src/Dflydev/DotAccessData/Data.php | 220 + .../Dflydev/DotAccessData/DataInterface.php | 89 + .../src/Dflydev/DotAccessData/Util.php | 54 + .../tests/Dflydev/DotAccessData/DataTest.php | 205 + .../tests/Dflydev/DotAccessData/UtilTest.php | 121 + .../dot-access-data/tests/bootstrap.php | 13 + lib/composer/vendor/filp/whoops/composer.json | 4 +- .../whoops/src/Whoops/Exception/Formatter.php | 1 - .../whoops/src/Whoops/Exception/Frame.php | 2 +- .../src/Whoops/Exception/FrameCollection.php | 4 +- .../whoops/src/Whoops/Exception/Inspector.php | 5 +- .../whoops/src/Whoops/Handler/Handler.php | 13 +- .../Whoops/Handler/JsonResponseHandler.php | 34 +- .../src/Whoops/Handler/PlainTextHandler.php | 6 +- .../src/Whoops/Handler/PrettyPageHandler.php | 12 +- .../src/Whoops/Handler/XmlResponseHandler.php | 4 +- .../src/Whoops/Resources/css/whoops.base.css | 8 +- .../src/Whoops/Resources/js/prettify.min.js | 28 + .../src/Whoops/Resources/js/whoops.base.js | 28 +- .../views/frames_description.html.php | 12 +- .../Whoops/Resources/views/layout.html.php | 2 + .../src/Whoops/Util/HtmlDumperOutput.php | 1 - .../filp/whoops/src/Whoops/Util/Misc.php | 32 +- .../whoops/src/Whoops/Util/TemplateHelper.php | 11 +- .../gettext/languages/bin/export-plural-rules | 4 + .../languages/bin/export-plural-rules.bat | 8 + .../{export.php => export-plural-rules.php} | 0 .../vendor/gettext/languages/bin/export.cmd | 3 - .../vendor/gettext/languages/bin/export.sh | 3 - .../vendor/gettext/languages/composer.json | 82 +- .../vendor/gettext/languages/src/CldrData.php | 20 +- .../languages/src/FormulaConverter.php | 6 +- .../vendor/gettext/languages/src/Language.php | 4 +- .../src/cldr-data/main/en-US/languages.json | 1278 +- .../src/cldr-data/main/en-US/scripts.json | 437 +- .../src/cldr-data/main/en-US/territories.json | 648 +- .../src/cldr-data/supplemental/plurals.json | 1697 +- .../vendor/grasmash/expander/.gitignore | 50 + .../vendor/grasmash/expander/.travis.yml | 28 + .../vendor/grasmash/expander/CONTRIBUTING.md | 0 .../vendor/grasmash/expander/LICENSE.md | 21 + .../vendor/grasmash/expander/README.md | 149 + .../vendor/grasmash/expander/RELEASE.md | 11 + .../vendor/grasmash/expander/composer.json | 50 + .../vendor/grasmash/expander/composer.lock | 1750 + .../vendor/grasmash/expander/phpunit.xml.dist | 16 + .../vendor/grasmash/expander/src/Expander.php | 303 + .../grasmash/expander/src/Stringifier.php | 24 + .../expander/src/StringifierInterface.php | 17 + .../expander/tests/phpunit/ExpanderTest.php | 122 + .../vendor/grasmash/yaml-expander/.gitignore | 50 + .../vendor/grasmash/yaml-expander/.travis.yml | 39 + .../grasmash/yaml-expander/CONTRIBUTING.md | 0 .../vendor/grasmash/yaml-expander/LICENSE.md | 21 + .../vendor/grasmash/yaml-expander/README.md | 100 + .../vendor/grasmash/yaml-expander/RELEASE.md | 11 + .../grasmash/yaml-expander/composer.json | 59 + .../grasmash/yaml-expander/composer.lock | 2019 + .../grasmash/yaml-expander/phpunit.xml.dist | 16 + .../grasmash/yaml-expander/scenarios/install | 23 + .../scenarios/symfony2/.gitignore | 2 + .../scenarios/symfony2/composer.json | 61 + .../yaml-expander/scenarios/symfony2/src | 1 + .../yaml-expander/scenarios/symfony2/tests | 1 + .../scenarios/symfony4/.gitignore | 1 + .../scenarios/symfony4/composer.json | 61 + .../scenarios/symfony4/composer.lock | 2163 + .../yaml-expander/scenarios/symfony4/src | 1 + .../yaml-expander/scenarios/symfony4/tests | 1 + .../grasmash/yaml-expander/src/Expander.php | 273 + .../tests/phpunit/ExpanderTest.php | 99 + .../yaml-expander/tests/resources/valid.yml | 35 + .../vendor/league/container/CHANGELOG.md | 15 + .../vendor/league/container/README.md | 2 + .../vendor/league/container/composer.json | 9 +- .../src/Argument/ArgumentResolverTrait.php | 2 +- .../vendor/league/container/src/Container.php | 41 +- .../src/Definition/DefinitionFactory.php | 2 +- .../container/src/ReflectionContainer.php | 11 +- .../ServiceProviderAggregateInterface.php | 4 +- lib/composer/vendor/monolog/monolog/.php_cs | 30 +- .../src/Monolog/Handler/FlowdockHandler.php | 4 +- .../src/Monolog/Handler/HipChatHandler.php | 4 +- .../src/Monolog/Handler/MandrillHandler.php | 2 +- .../src/Monolog/Handler/PushoverHandler.php | 10 +- .../src/Monolog/Handler/SlackHandler.php | 2 +- .../monolog/monolog/src/Monolog/Registry.php | 6 +- .../Monolog/Handler/FlowdockHandlerTest.php | 2 +- .../Monolog/Handler/HipChatHandlerTest.php | 4 +- .../Monolog/Handler/PushoverHandlerTest.php | 2 +- .../Monolog/Handler/SlackHandlerTest.php | 2 +- .../vendor/myclabs/deep-copy/.gitignore | 9 +- .../vendor/myclabs/deep-copy/.travis.yml | 15 +- .../vendor/myclabs/deep-copy/README.md | 273 +- .../vendor/myclabs/deep-copy/composer.json | 26 +- .../myclabs/deep-copy/fixtures/f001/A.php | 20 + .../myclabs/deep-copy/fixtures/f001/B.php | 20 + .../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 + .../myclabs/deep-copy/fixtures/f006/A.php | 26 + .../myclabs/deep-copy/fixtures/f006/B.php | 26 + .../fixtures/f007/FooDateInterval.php | 15 + .../fixtures/f007/FooDateTimeZone.php | 15 + .../myclabs/deep-copy/fixtures/f008/A.php | 18 + .../myclabs/deep-copy/fixtures/f008/B.php | 7 + .../deep-copy/src/DeepCopy/DeepCopy.php | 91 +- .../src/DeepCopy/Exception/CloneException.php | 5 +- .../DeepCopy/Exception/PropertyException.php | 9 + .../Doctrine/DoctrineCollectionFilter.php | 8 +- .../DoctrineEmptyCollectionFilter.php | 8 +- .../Filter/Doctrine/DoctrineProxyFilter.php | 22 + .../deep-copy/src/DeepCopy/Filter/Filter.php | 3 +- .../src/DeepCopy/Filter/KeepFilter.php | 5 +- .../src/DeepCopy/Filter/ReplaceFilter.php | 8 +- .../src/DeepCopy/Filter/SetNullFilter.php | 8 +- .../Matcher/Doctrine/DoctrineProxyMatcher.php | 22 + .../src/DeepCopy/Matcher/Matcher.php | 4 +- .../src/DeepCopy/Matcher/PropertyMatcher.php | 6 +- .../DeepCopy/Matcher/PropertyNameMatcher.php | 4 +- .../DeepCopy/Matcher/PropertyTypeMatcher.php | 18 +- .../DeepCopy/Reflection/ReflectionHelper.php | 45 +- .../TypeFilter/Date/DateIntervalFilter.php | 33 + .../src/DeepCopy/TypeFilter/ReplaceFilter.php | 3 + .../DeepCopy/TypeFilter/ShallowCopyFilter.php | 3 + .../TypeFilter/Spl/SplDoublyLinkedList.php | 35 +- .../Spl/SplDoublyLinkedListFilter.php | 51 + .../src/DeepCopy/TypeFilter/TypeFilter.php | 3 +- .../src/DeepCopy/TypeMatcher/TypeMatcher.php | 6 +- .../deep-copy/src/DeepCopy/deep_copy.php | 16 + .../vendor/pear/console_getopt/.gitignore | 6 + .../vendor/pear/console_getopt/.travis.yml | 9 + .../pear/console_getopt/Console/Getopt.php | 360 + .../vendor/pear/console_getopt/LICENSE | 25 + .../vendor/pear/console_getopt/README.rst | 26 + .../vendor/pear/console_getopt/composer.json | 35 + .../vendor/pear/console_getopt/package.xml | 269 + .../pear/console_getopt/tests/001-getopt.phpt | 63 + .../pear/console_getopt/tests/bug10557.phpt | 22 + .../pear/console_getopt/tests/bug11068.phpt | 44 + .../pear/console_getopt/tests/bug13140.phpt | 75 + lib/composer/vendor/pear/mail/.gitignore | 4 + lib/composer/vendor/pear/mail/.travis.yml | 19 + lib/composer/vendor/pear/mail/LICENSE | 29 + lib/composer/vendor/pear/mail/Mail.php | 267 + .../vendor/pear/mail}/Mail/RFC822.php | 112 +- .../vendor/pear/mail}/Mail/mail.php | 38 +- .../vendor/pear/mail}/Mail/mock.php | 45 +- .../vendor/pear/mail}/Mail/null.php | 35 +- .../vendor/pear/mail}/Mail/sendmail.php | 70 +- .../vendor/pear/mail}/Mail/smtp.php | 113 +- .../vendor/pear/mail}/Mail/smtpmx.php | 36 +- lib/composer/vendor/pear/mail/README.rst | 53 + lib/composer/vendor/pear/mail/composer.json | 46 + lib/composer/vendor/pear/mail/package.xml | 79 + .../vendor/pear/mail/tests/13659.phpt | 25 + lib/composer/vendor/pear/mail/tests/9137.phpt | 33 + .../vendor/pear/mail/tests/9137_2.phpt | 35 + lib/composer/vendor/pear/mail/tests/Makefile | 8 + .../vendor/pear/mail/tests/bug17178.phpt | 11 + .../vendor/pear/mail/tests/bug17317.phpt | 19 + .../vendor/pear/mail/tests/rfc822.phpt | 107 + .../vendor/pear/mail/tests/smtp_error.phpt | 30 + .../pear/mail/tests/validateQuotedString.php | 17 + lib/composer/vendor/pear/net_smtp/.gitignore | 15 + lib/composer/vendor/pear/net_smtp/.travis.yml | 11 + lib/composer/vendor/pear/net_smtp/LICENSE | 69 + .../vendor/pear/net_smtp/Net/SMTP.php | 1256 + lib/composer/vendor/pear/net_smtp/README.rst | 1 + .../vendor/pear/net_smtp/composer.json | 48 + .../vendor/pear/net_smtp/docs/docutils.conf | 16 + .../vendor/pear/net_smtp/docs/docutils.css | 108 + .../vendor/pear/net_smtp/docs/guide.txt | 267 + .../vendor/pear/net_smtp/examples/basic.php | 39 + lib/composer/vendor/pear/net_smtp/package.xml | 77 + lib/composer/vendor/pear/net_smtp/phpdoc.sh | 3 + .../vendor/pear/net_smtp/tests/auth.phpt | 28 + .../vendor/pear/net_smtp/tests/basic.phpt | 42 + .../pear/net_smtp/tests/config.php.dist | 15 + .../vendor/pear/net_smtp/tests/quotedata.phpt | 70 + .../vendor/pear/net_socket/.gitignore | 6 + .../vendor/pear/net_socket/.travis.yml | 21 + lib/composer/vendor/pear/net_socket/LICENSE | 9 + .../vendor/pear/net_socket/Net/Socket.php | 723 + lib/composer/vendor/pear/net_socket/README.md | 43 + .../vendor/pear/net_socket/composer.json | 42 + .../vendor/pear/net_socket/package.xml | 59 + .../vendor/pear/net_socket/phpunit.xml.dist | 29 + .../vendor/pear/pear-core-minimal/README.rst | 26 + .../pear/pear-core-minimal/composer.json | 32 + .../pear/pear-core-minimal/src/OS/Guess.php | 337 + .../pear/pear-core-minimal/src/PEAR.php | 1113 + .../pear/pear-core-minimal/src/PEAR/Error.php | 14 + .../pear-core-minimal/src/PEAR/ErrorStack.php | 979 + .../pear/pear-core-minimal/src/System.php | 622 + .../vendor/pear/pear_exception/.gitignore | 6 + .../vendor/pear/pear_exception/.travis.yml | 7 + .../vendor/pear/pear_exception/LICENSE | 27 + .../pear/pear_exception/PEAR/Exception.php | 456 + .../vendor/pear/pear_exception/composer.json | 43 + .../vendor/pear/pear_exception/package.xml | 120 + .../tests/PEAR/ExceptionTest.php | 78 + .../vendor/phar-io/manifest/.gitignore | 8 + lib/composer/vendor/phar-io/manifest/.php_cs | 67 + .../vendor/phar-io/manifest/.travis.yml | 33 + lib/composer/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 + .../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 + .../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 + .../phar-io/manifest/src/values/Type.php | 60 + .../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 + lib/composer/vendor/phar-io/version/.php_cs | 67 + .../vendor/phar-io/version/.travis.yml | 33 + lib/composer/vendor/phar-io/version/LICENSE | 31 + lib/composer/vendor/phar-io/version/README.md | 16 + lib/composer/vendor/phar-io/version/build.xml | 41 + .../vendor/phar-io/version/composer.json | 34 + lib/composer/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 + .../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/.gitignore | 4 - .../.travis.yml | 1 + .../phpdocumentor/reflection-common/README.md | 1 + .../reflection-common/composer.lock | 974 - .../reflection-common/phpunit.xml.dist | 26 - .../reflection-common/src/Fqsen.php | 6 +- .../tests/common/bootstrap.php | 10 - .../tests/unit/FqsenTest.php | 88 - .../reflection-docblock/.coveralls.yml | 3 + .../reflection-docblock/.scrutinizer.yml | 32 - .../reflection-docblock/.travis.yml | 36 - .../reflection-docblock/README.md | 28 +- .../reflection-docblock/composer.json | 16 +- .../reflection-docblock/composer.lock | 1120 - .../easy-coding-standard.neon | 31 + .../01-interpreting-a-simple-docblock.php | 27 - .../examples/02-interpreting-tags.php | 24 - .../examples/03-reconstituting-a-docblock.php | 27 - .../examples/04-adding-your-own-tag.php | 135 - .../playing-with-descriptions/02-escaping.php | 47 - .../reflection-docblock/phpmd.xml.dist | 23 - .../reflection-docblock/phpunit.xml.dist | 33 - .../reflection-docblock/src/DocBlock.php | 28 +- .../src/DocBlock/Description.php | 11 + .../src/DocBlock/DescriptionFactory.php | 1 - .../src/DocBlock/ExampleFinder.php | 4 +- .../src/DocBlock/Serializer.php | 13 +- .../src/DocBlock/StandardTagFactory.php | 13 +- .../src/DocBlock/Tags/Author.php | 2 +- .../src/DocBlock/Tags/Covers.php | 7 +- .../src/DocBlock/Tags/Deprecated.php | 2 +- .../src/DocBlock/Tags/Example.php | 118 +- .../Tags/Formatter/AlignFormatter.php | 47 + .../Tags/Formatter/PassthroughFormatter.php | 2 +- .../src/DocBlock/Tags/Method.php | 30 +- .../src/DocBlock/Tags/Param.php | 2 +- .../src/DocBlock/Tags/Property.php | 2 +- .../src/DocBlock/Tags/PropertyRead.php | 2 +- .../src/DocBlock/Tags/PropertyWrite.php | 2 +- .../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 | 3 +- .../src/DocBlock/Tags/See.php | 23 +- .../src/DocBlock/Tags/Since.php | 2 +- .../src/DocBlock/Tags/Source.php | 1 + .../src/DocBlock/Tags/Var_.php | 6 +- .../src/DocBlock/Tags/Version.php | 2 +- .../src/DocBlockFactory.php | 10 +- .../integration/InterpretingDocBlocksTest.php | 97 - .../ReconstitutingADocBlockTest.php | 35 - .../tests/integration/UsingTagsTest.php | 39 - .../unit/DocBlock/DescriptionFactoryTest.php | 174 - .../tests/unit/DocBlock/DescriptionTest.php | 75 - .../tests/unit/DocBlock/SerializerTest.php | 201 - .../unit/DocBlock/StandardTagFactoryTest.php | 361 - .../tests/unit/DocBlock/Tags/AuthorTest.php | 148 - .../tests/unit/DocBlock/Tags/CoversTest.php | 155 - .../unit/DocBlock/Tags/DeprecatedTest.php | 166 - .../Formatter/PassthroughFormatterTest.php | 41 - .../tests/unit/DocBlock/Tags/GenericTest.php | 146 - .../tests/unit/DocBlock/Tags/LinkTest.php | 158 - .../tests/unit/DocBlock/Tags/MethodTest.php | 437 - .../tests/unit/DocBlock/Tags/ParamTest.php | 228 - .../unit/DocBlock/Tags/PropertyReadTest.php | 201 - .../tests/unit/DocBlock/Tags/PropertyTest.php | 200 - .../unit/DocBlock/Tags/PropertyWriteTest.php | 201 - .../tests/unit/DocBlock/Tags/ReturnTest.php | 170 - .../tests/unit/DocBlock/Tags/SeeTest.php | 173 - .../tests/unit/DocBlock/Tags/SinceTest.php | 166 - .../tests/unit/DocBlock/Tags/SourceTest.php | 199 - .../tests/unit/DocBlock/Tags/ThrowsTest.php | 170 - .../tests/unit/DocBlock/Tags/UsesTest.php | 174 - .../tests/unit/DocBlock/Tags/VarTest.php | 200 - .../tests/unit/DocBlock/Tags/VersionTest.php | 166 - .../tests/unit/DocBlockFactoryTest.php | 290 - .../tests/unit/DocBlockTest.php | 252 - .../type-resolver/.scrutinizer.yml | 31 - .../phpdocumentor/type-resolver/README.md | 47 +- .../phpdocumentor/type-resolver/composer.json | 2 +- .../examples/01-resolving-simple-types.php | 13 - .../examples/02-resolving-classes.php | 12 - .../examples/03-resolving-all-elements.php | 17 - ...ing-the-context-using-class-reflection.php | 30 - ...ng-the-context-using-method-reflection.php | 30 - ...vering-the-context-using-file-contents.php | 22 - .../type-resolver/examples/Classy.php | 16 - .../type-resolver/phpmd.xml.dist | 23 - .../type-resolver/phpunit.xml.dist | 31 - .../type-resolver/src/FqsenResolver.php | 1 + .../type-resolver/src/TypeResolver.php | 74 +- .../type-resolver/src/Types/Array_.php | 7 +- .../type-resolver/src/Types/Compound.php | 15 +- .../type-resolver/src/Types/Context.php | 6 +- .../src/Types/ContextFactory.php | 2 +- .../type-resolver/src/Types/Iterable_.php | 31 + .../src/Types/{Mixed.php => Mixed_.php} | 2 +- .../type-resolver/src/Types/Nullable.php | 56 + .../type-resolver/src/Types/Object_.php | 1 + .../type-resolver/src/Types/Parent_.php | 33 + .../src/Types/{Resource.php => Resource_.php} | 2 +- .../tests/unit/TypeResolverTest.php | 395 - .../tests/unit/Types/ContextFactoryTest.php | 188 - .../tests/unit/Types/ContextTest.php | 61 - .../vendor/phpspec/prophecy/.travis.yml | 29 - .../vendor/phpspec/prophecy/CHANGES.md | 31 + .../vendor/phpspec/prophecy/CONTRIBUTING.md | 21 - .../vendor/phpspec/prophecy/README.md | 2 +- .../vendor/phpspec/prophecy/composer.json | 17 +- .../Argument/ArgumentsWildcardSpec.php | 146 - .../Argument/Token/AnyValueTokenSpec.php | 28 - .../Argument/Token/AnyValuesTokenSpec.php | 28 - .../Token/ApproximateValueTokenSpec.php | 55 - .../Argument/Token/ArrayCountTokenSpec.php | 64 - .../Argument/Token/ArrayEntryTokenSpec.php | 229 - .../Token/ArrayEveryEntryTokenSpec.php | 109 - .../Argument/Token/CallbackTokenSpec.php | 42 - .../Argument/Token/ExactValueTokenSpec.php | 155 - .../Token/IdenticalValueTokenSpec.php | 152 - .../Argument/Token/LogicalAndTokenSpec.php | 78 - .../Argument/Token/LogicalNotTokenSpec.php | 65 - .../Argument/Token/ObjectStateTokenSpec.php | 101 - .../Token/StringContainsTokenSpec.php | 49 - .../Prophecy/Argument/Token/TypeTokenSpec.php | 62 - .../prophecy/spec/Prophecy/ArgumentSpec.php | 107 - .../spec/Prophecy/Call/CallCenterSpec.php | 195 - .../prophecy/spec/Prophecy/Call/CallSpec.php | 54 - .../Comparator/ClosureComparatorSpec.php | 39 - .../spec/Prophecy/Comparator/FactorySpec.php | 20 - .../Comparator/ProphecyComparatorSpec.php | 39 - .../DisableConstructorPatchSpec.php | 59 - .../ClassPatch/HhvmExceptionPatchSpec.php | 37 - .../Doubler/ClassPatch/KeywordPatchSpec.php | 44 - .../Doubler/ClassPatch/MagicCallPatchSpec.php | 125 - .../ClassPatch/ProphecySubjectPatchSpec.php | 83 - .../ReflectionClassNewInstancePatchSpec.php | 47 - .../ClassPatch/SplFileInfoPatchSpec.php | 107 - .../ClassPatch/TraversablePatchSpec.php | 61 - .../spec/Prophecy/Doubler/DoublerSpec.php | 122 - .../Generator/ClassCodeGeneratorSpec.php | 323 - .../Doubler/Generator/ClassCreatorSpec.php | 44 - .../Doubler/Generator/ClassMirrorSpec.php | 784 - .../Generator/Node/ArgumentNodeSpec.php | 92 - .../Doubler/Generator/Node/ClassNodeSpec.php | 200 - .../Doubler/Generator/Node/MethodNodeSpec.php | 141 - .../spec/Prophecy/Doubler/LazyDoubleSpec.php | 96 - .../Prophecy/Doubler/NameGeneratorSpec.php | 72 - .../Call/UnexpectedCallExceptionSpec.php | 32 - .../Doubler/ClassCreatorExceptionSpec.php | 28 - .../Doubler/ClassMirrorExceptionSpec.php | 27 - .../Doubler/ClassNotFoundExceptionSpec.php | 25 - .../Exception/Doubler/DoubleExceptionSpec.php | 14 - .../InterfaceNotFoundExceptionSpec.php | 24 - .../MethodNotExtendableExceptionSpec.php | 29 - .../Doubler/MethodNotFoundExceptionSpec.php | 40 - .../Prediction/AggregateExceptionSpec.php | 57 - .../Prediction/NoCallsExceptionSpec.php | 29 - .../UnexpectedCallsCountExceptionSpec.php | 31 - .../UnexpectedCallsExceptionSpec.php | 36 - .../Prophecy/MethodProphecyExceptionSpec.php | 30 - .../Prophecy/ObjectProphecyExceptionSpec.php | 27 - .../Prediction/CallPredictionSpec.php | 42 - .../Prediction/CallTimesPredictionSpec.php | 54 - .../Prediction/CallbackPredictionSpec.php | 36 - .../Prediction/NoCallsPredictionSpec.php | 43 - .../Prophecy/Promise/CallbackPromiseSpec.php | 110 - .../Promise/ReturnArgumentPromiseSpec.php | 41 - .../Prophecy/Promise/ReturnPromiseSpec.php | 61 - .../Prophecy/Promise/ThrowPromiseSpec.php | 58 - .../Prophecy/Prophecy/MethodProphecySpec.php | 384 - .../Prophecy/Prophecy/ObjectProphecySpec.php | 319 - .../spec/Prophecy/Prophecy/RevealerSpec.php | 51 - .../prophecy/spec/Prophecy/ProphetSpec.php | 91 - .../spec/Prophecy/Util/StringUtilSpec.php | 97 - .../Argument/Token/ObjectStateToken.php | 4 +- .../prophecy/src/Prophecy/Call/CallCenter.php | 13 +- .../Doubler/ClassPatch/KeywordPatch.php | 9 +- .../Doubler/ClassPatch/MagicCallPatch.php | 30 +- .../ClassPatch/ProphecySubjectPatch.php | 12 +- .../Doubler/ClassPatch/SplFileInfoPatch.php | 22 +- .../Doubler/Generator/ClassCodeGenerator.php | 39 +- .../Doubler/Generator/ClassMirror.php | 6 +- .../Doubler/Generator/Node/ArgumentNode.php | 11 + .../Doubler/Generator/Node/MethodNode.php | 21 +- .../src/Prophecy/Promise/ThrowPromise.php | 22 +- .../src/Prophecy/Prophecy/MethodProphecy.php | 48 +- .../prophecy/src/Prophecy/Util/ExportUtil.php | 5 +- .../{ => .github}/CONTRIBUTING.md | 0 .../.github/ISSUE_TEMPLATE.md | 18 + .../phpunit/php-code-coverage/.gitignore | 8 +- .../vendor/phpunit/php-code-coverage/.php_cs | 150 +- .../phpunit/php-code-coverage/.travis.yml | 34 +- .../php-code-coverage/ChangeLog-4.0.md | 41 + .../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 | 2 +- .../phpunit/php-code-coverage/README.md | 31 +- .../phpunit/php-code-coverage/build.xml | 52 +- .../phpunit/php-code-coverage/composer.json | 36 +- .../phpunit/php-code-coverage/phpunit.xml | 21 + .../php-code-coverage/src/CodeCoverage.php | 563 +- .../php-code-coverage/src/Driver/HHVM.php | 2 +- .../php-code-coverage/src/Driver/PHPDBG.php | 10 +- .../php-code-coverage/src/Driver/Xdebug.php | 26 +- .../Exception/InvalidArgumentException.php | 6 +- .../phpunit/php-code-coverage/src/Filter.php | 24 +- .../src/Node/AbstractNode.php | 74 +- .../php-code-coverage/src/Node/Builder.php | 47 +- .../php-code-coverage/src/Node/Directory.php | 16 +- .../php-code-coverage/src/Node/File.php | 102 +- .../php-code-coverage/src/Node/Iterator.php | 2 +- .../php-code-coverage/src/Report/Clover.php | 22 +- .../php-code-coverage/src/Report/Crap4j.php | 26 +- .../src/Report/Html/Facade.php | 69 +- .../src/Report/Html/Renderer.php | 51 +- .../src/Report/Html/Renderer/Dashboard.php | 72 +- .../src/Report/Html/Renderer/Directory.php | 12 +- .../src/Report/Html/Renderer/File.php | 90 +- .../Renderer/Template/css/bootstrap.min.css | 6 +- .../Renderer/Template/dashboard.html.dist | 20 +- .../Renderer/Template/directory.html.dist | 14 +- .../Html/Renderer/Template/file.html.dist | 38 +- .../Renderer/Template/js/bootstrap.min.js | 8 +- .../Report/Html/Renderer/Template/js/file.js | 61 + .../Html/Renderer/Template/js/jquery.min.js | 9 +- .../php-code-coverage/src/Report/PHP.php | 10 +- .../php-code-coverage/src/Report/Text.php | 22 +- .../src/Report/Xml/BuildInformation.php | 101 + .../src/Report/Xml/Coverage.php | 2 +- .../src/Report/Xml/Facade.php | 101 +- .../php-code-coverage/src/Report/Xml/File.php | 20 +- .../src/Report/Xml/Project.php | 45 +- .../src/Report/Xml/Report.php | 39 +- .../src/Report/Xml/Source.php | 45 + .../src/Report/Xml/Totals.php | 10 +- .../phpunit/php-code-coverage/src/Util.php | 14 +- .../phpunit/php-code-coverage/src/Version.php | 31 + .../php-code-coverage/tests/TestCase.php | 2 +- .../tests/_files/BankAccountTest.php | 4 +- .../_files/CoverageClassExtendedTest.php | 4 +- .../tests/_files/CoverageClassTest.php | 4 +- .../CoverageFunctionParenthesesTest.php | 4 +- ...erageFunctionParenthesesWhitespaceTest.php | 4 +- .../tests/_files/CoverageFunctionTest.php | 4 +- .../CoverageMethodOneLineAnnotationTest.php | 3 +- .../_files/CoverageMethodParenthesesTest.php | 4 +- ...overageMethodParenthesesWhitespaceTest.php | 4 +- .../tests/_files/CoverageMethodTest.php | 4 +- .../tests/_files/CoverageNoneTest.php | 4 +- .../tests/_files/CoverageNotPrivateTest.php | 4 +- .../tests/_files/CoverageNotProtectedTest.php | 4 +- .../tests/_files/CoverageNotPublicTest.php | 4 +- .../tests/_files/CoverageNothingTest.php | 4 +- .../tests/_files/CoveragePrivateTest.php | 4 +- .../tests/_files/CoverageProtectedTest.php | 4 +- .../tests/_files/CoveragePublicTest.php | 4 +- .../CoverageTwoDefaultClassAnnotations.php | 1 - .../NamespaceCoverageClassExtendedTest.php | 4 +- .../_files/NamespaceCoverageClassTest.php | 4 +- ...NamespaceCoverageCoversClassPublicTest.php | 4 +- .../NamespaceCoverageCoversClassTest.php | 4 +- .../_files/NamespaceCoverageMethodTest.php | 4 +- .../NamespaceCoverageNotPrivateTest.php | 4 +- .../NamespaceCoverageNotProtectedTest.php | 4 +- .../_files/NamespaceCoverageNotPublicTest.php | 4 +- .../_files/NamespaceCoveragePrivateTest.php | 4 +- .../_files/NamespaceCoverageProtectedTest.php | 4 +- .../_files/NamespaceCoveragePublicTest.php | 4 +- .../_files/NotExistingCoveredElementTest.php | 4 +- .../BankAccount.php.html | 40 +- .../CoverageForBankAccount/dashboard.html | 22 +- .../HTML/CoverageForBankAccount/index.html | 16 +- .../dashboard.html | 24 +- .../index.html | 16 +- ...with_class_and_anonymous_function.php.html | 42 +- .../dashboard.html | 22 +- .../index.html | 42 +- .../source_with_ignore.php.html | 140 +- .../BankAccount.php.xml | 234 +- .../XML/CoverageForBankAccount/index.xml | 26 +- .../index.xml | 26 +- ..._with_class_and_anonymous_function.php.xml | 135 +- .../CoverageForFileWithIgnoredLines/index.xml | 26 +- .../source_with_ignore.php.xml | 173 +- .../class-with-anonymous-function-clover.xml | 2 +- .../class-with-anonymous-function-crap4j.xml | 6 +- .../tests/_files/ignored-lines-clover.xml | 4 +- .../tests/_files/ignored-lines-text.txt | 12 +- .../source_with_oneline_annotations.php | 2 +- .../tests/tests/CodeCoverageTest.php | 39 +- .../tests/tests/FilterTest.php | 4 +- .../tests/tests/UtilTest.php | 4 +- .../php-code-coverage/tests/tests/XMLTest.php | 9 +- .../phpunit/php-file-iterator/ChangeLog.md | 33 +- .../phpunit/php-file-iterator/README.md | 12 +- .../phpunit/php-file-iterator/src/Factory.php | 4 +- .../php-file-iterator/src/Iterator.php | 2 +- .../vendor/phpunit/php-timer/.gitignore | 1 + .../vendor/phpunit/php-timer/.travis.yml | 21 +- .../vendor/phpunit/php-timer/README.md | 14 +- .../vendor/phpunit/php-timer/composer.json | 12 +- .../vendor/phpunit/php-timer/phpunit.xml | 19 + .../vendor/phpunit/php-timer/src/Timer.php | 2 - .../phpunit/php-timer/tests/TimerTest.php | 9 +- .../phpunit/php-token-stream/.gitignore | 1 - .../phpunit/php-token-stream/.travis.yml | 27 +- .../phpunit/php-token-stream/ChangeLog.md | 19 + .../vendor/phpunit/php-token-stream/LICENSE | 2 +- .../vendor/phpunit/php-token-stream/README.md | 2 +- .../vendor/phpunit/php-token-stream/build.xml | 46 +- .../php-token-stream/build/phpunit.xml | 17 - .../phpunit/php-token-stream/composer.json | 10 +- .../build => php-token-stream}/phpunit.xml | 11 +- .../phpunit/php-token-stream/src/Token.php | 1116 +- .../php-token-stream/src/Token/Stream.php | 130 +- .../src/Token/Stream/CachingFactory.php | 15 +- .../tests/Token/ClassTest.php | 101 +- .../tests/Token/ClosureTest.php | 47 +- .../tests/Token/FunctionTest.php | 35 +- .../tests/Token/IncludeTest.php | 44 +- .../tests/Token/InterfaceTest.php | 90 +- .../tests/Token/NamespaceTest.php | 35 +- .../php-token-stream/tests/TokenTest.php | 18 +- .../class_with_method_named_empty.php | 7 + ...ltiple_anonymous_classes_and_functions.php | 26 + .../_fixture/php-code-coverage-issue-424.php | 13 + .../php-token-stream/tests/bootstrap.php | 8 + .../.github/ISSUE_TEMPLATE.md | 15 + .../phpunit/phpunit-mock-objects/.gitignore | 9 +- .../phpunit/phpunit-mock-objects/.php_cs | 148 +- .../phpunit/phpunit-mock-objects/.travis.yml | 38 +- .../phpunit-mock-objects/CONTRIBUTING.md | 2 +- .../phpunit/phpunit-mock-objects/LICENSE | 4 +- .../phpunit/phpunit-mock-objects/README.md | 23 +- .../phpunit/phpunit-mock-objects/build.xml | 53 +- .../phpunit-mock-objects/build/travis-ci.xml | 12 - .../phpunit-mock-objects/composer.json | 24 +- .../phpunit/phpunit-mock-objects/phpunit.xml | 21 +- .../MockObject => }/Builder/Identity.php | 9 +- .../src/Builder/InvocationMocker.php | 299 + .../MockObject => }/Builder/Match.php | 9 +- .../src/Builder/MethodNameMatch.php | 26 + .../NamespaceMatch.php} | 17 +- .../Builder/ParametersMatch.php | 21 +- .../MockObject => }/Builder/Stub.php | 15 +- .../src/Exception/BadMethodCallException.php | 14 + .../MockObject => }/Exception/Exception.php | 7 +- .../src/Exception/RuntimeException.php | 14 + .../src/ForwardCompatibility/MockObject.php | 17 + .../MockObject/Builder/InvocationMocker.php | 291 - .../MockObject/Builder/MethodNameMatch.php | 27 - .../Exception/BadMethodCallException.php | 16 - .../MockObject/Exception/RuntimeException.php | 16 - .../Generator/mocked_static_method.tpl.dist | 5 - .../src/Framework/MockObject/Invocation.php | 22 - .../Framework/MockObject/Stub/Exception.php | 48 - .../MockObject/Stub/ReturnArgument.php | 38 - .../MockObject/Stub/ReturnCallback.php | 51 - .../MockObject/Stub/ReturnReference.php | 22 - .../Framework/MockObject/Stub/ReturnSelf.php | 34 - .../{Framework/MockObject => }/Generator.php | 653 +- .../Generator/deprecation.tpl.dist | 0 .../Generator/mocked_class.tpl.dist | 4 +- .../Generator/mocked_class_method.tpl.dist | 2 +- .../Generator/mocked_clone.tpl.dist | 0 .../Generator/mocked_method.tpl.dist | 2 +- .../Generator/mocked_method_void.tpl.dist | 2 +- .../Generator/mocked_static_method.tpl.dist | 5 + .../Generator/proxied_method.tpl.dist | 2 +- .../Generator/proxied_method_void.tpl.dist | 2 +- .../Generator/trait_class.tpl.dist | 0 .../Generator/unmocked_clone.tpl.dist | 0 .../Generator/wsdl_class.tpl.dist | 0 .../Generator/wsdl_method.tpl.dist | 0 .../src/Invocation/Invocation.php | 31 + .../ObjectInvocation.php} | 14 +- .../StaticInvocation.php} | 157 +- .../MockObject => }/InvocationMocker.php | 63 +- .../{Framework/MockObject => }/Invokable.php | 15 +- .../{Framework/MockObject => }/Matcher.php | 447 +- .../Matcher/AnyInvokedCount.php | 9 +- .../MockObject => }/Matcher/AnyParameters.php | 13 +- .../Matcher/ConsecutiveParameters.php | 48 +- .../MockObject => }/Matcher/Invocation.php | 19 +- .../Matcher/InvokedAtIndex.php | 28 +- .../Matcher/InvokedAtLeastCount.php | 13 +- .../Matcher/InvokedAtLeastOnce.php | 13 +- .../Matcher/InvokedAtMostCount.php | 13 +- .../MockObject => }/Matcher/InvokedCount.php | 45 +- .../Matcher/InvokedRecorder.php | 28 +- .../MockObject => }/Matcher/MethodName.php | 35 +- .../MockObject => }/Matcher/Parameters.php | 61 +- .../Matcher/StatelessInvocation.php | 16 +- .../MockObject => }/MockBuilder.php | 85 +- .../{Framework/MockObject => }/MockObject.php | 28 +- .../src/{Framework/MockObject => }/Stub.php | 13 +- .../MockObject => }/Stub/ConsecutiveCalls.php | 30 +- .../src/Stub/Exception.php | 42 + .../Stub/MatcherCollection.php | 13 +- .../src/Stub/ReturnArgument.php | 43 + .../src/Stub/ReturnCallback.php | 52 + .../src/Stub/ReturnReference.php | 45 + .../src/Stub/ReturnSelf.php | 38 + .../Stub/Return.php => Stub/ReturnStub.php} | 18 +- .../MockObject => }/Stub/ReturnValueMap.php | 26 +- .../{Framework/MockObject => }/Verifiable.php | 11 +- .../Builder/InvocationMockerTest.php | 13 +- .../tests/{MockObject => }/Generator/232.phpt | 16 +- .../tests/Generator/397.phpt | 98 + .../Generator/abstract_class.phpt | 20 +- .../{MockObject => }/Generator/class.phpt | 18 +- .../Generator/class_call_parent_clone.phpt | 14 +- .../class_call_parent_constructor.phpt | 14 +- .../class_dont_call_parent_clone.phpt | 14 +- .../class_dont_call_parent_constructor.phpt | 14 +- ...ing_interface_call_parent_constructor.phpt | 14 +- ...nterface_dont_call_parent_constructor.phpt | 14 +- .../Generator/class_partial.phpt | 16 +- .../class_with_deprecated_method.phpt | 14 +- .../class_with_method_named_method.phpt | 14 +- ...ullable_typehinted_variadic_arguments.phpt | 103 + ...od_with_typehinted_variadic_arguments.phpt | 99 + ...s_with_method_with_variadic_arguments.phpt | 16 +- .../{MockObject => }/Generator/interface.phpt | 16 +- .../invocation_object_clone_object.phpt | 18 +- .../Generator/namespaced_class.phpt | 18 +- .../namespaced_class_call_parent_clone.phpt | 14 +- ...espaced_class_call_parent_constructor.phpt | 14 +- ...mespaced_class_dont_call_parent_clone.phpt | 14 +- ...ed_class_dont_call_parent_constructor.phpt | 14 +- ...ing_interface_call_parent_constructor.phpt | 14 +- ...nterface_dont_call_parent_constructor.phpt | 14 +- .../Generator/namespaced_class_partial.phpt | 16 +- .../Generator/namespaced_interface.phpt | 16 +- .../Generator/nonexistent_class.phpt | 14 +- .../nonexistent_class_with_namespace.phpt | 14 +- ...ith_namespace_starting_with_separator.phpt | 14 +- .../Generator/nullable_types.phpt | 16 +- .../{MockObject => }/Generator/proxy.phpt | 18 +- .../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 | 20 +- .../return_type_declarations_self.phpt | 20 +- ...eturn_type_declarations_static_method.phpt | 20 +- .../return_type_declarations_void.phpt | 16 +- .../Generator/scalar_type_declarations.phpt | 20 +- .../Generator/wsdl_class.phpt | 8 +- .../Generator/wsdl_class_namespace.phpt | 8 +- .../Generator/wsdl_class_partial.phpt | 8 +- .../tests/GeneratorTest.php | 99 +- .../ObjectInvocationTest.php} | 44 +- .../StaticInvocationTest.php} | 40 +- .../Matcher/ConsecutiveParametersTest.php | 16 +- .../tests/MockBuilderTest.php | 9 +- .../tests/MockObjectTest.php | 118 +- .../tests/ProxyObjectTest.php | 6 +- .../tests/_fixture/AnInterface.php | 1 + .../ClassWithAllPossibleReturnTypes.php | 56 + .../_fixture/TraversableMockTestInterface.php | 3 +- .../vendor/phpunit/phpunit/.editorconfig | 8 + .../phpunit/{ => .github}/CODE_OF_CONDUCT.md | 0 .../phpunit/{ => .github}/CONTRIBUTING.md | 17 +- .../phpunit/phpunit/.github/ISSUE_TEMPLATE.md | 15 + .../vendor/phpunit/phpunit/.gitignore | 1 + lib/composer/vendor/phpunit/phpunit/.php_cs | 155 +- .../vendor/phpunit/phpunit/.stickler.yml | 3 + .../vendor/phpunit/phpunit/.travis.yml | 36 +- .../vendor/phpunit/phpunit/ChangeLog-4.0.md | 176 - .../vendor/phpunit/phpunit/ChangeLog-4.1.md | 73 - .../vendor/phpunit/phpunit/ChangeLog-4.2.md | 56 - .../vendor/phpunit/phpunit/ChangeLog-4.3.md | 54 - .../vendor/phpunit/phpunit/ChangeLog-4.4.md | 57 - .../vendor/phpunit/phpunit/ChangeLog-4.5.md | 28 - .../vendor/phpunit/phpunit/ChangeLog-4.6.md | 95 - .../vendor/phpunit/phpunit/ChangeLog-4.7.md | 71 - .../vendor/phpunit/phpunit/ChangeLog-4.8.md | 227 - .../vendor/phpunit/phpunit/ChangeLog-5.0.md | 128 - .../vendor/phpunit/phpunit/ChangeLog-5.1.md | 68 - .../vendor/phpunit/phpunit/ChangeLog-5.2.md | 117 - .../vendor/phpunit/phpunit/ChangeLog-5.3.md | 55 - .../vendor/phpunit/phpunit/ChangeLog-5.4.md | 83 - .../vendor/phpunit/phpunit/ChangeLog-5.5.md | 74 - .../vendor/phpunit/phpunit/ChangeLog-5.7.md | 233 + .../vendor/phpunit/phpunit/ChangeLog-6.5.md | 51 + lib/composer/vendor/phpunit/phpunit/LICENSE | 2 +- lib/composer/vendor/phpunit/phpunit/README.md | 6 +- .../vendor/phpunit/phpunit/appveyor.yml | 65 + lib/composer/vendor/phpunit/phpunit/build.xml | 88 +- .../vendor/phpunit/phpunit/composer.json | 50 +- lib/composer/vendor/phpunit/phpunit/phpunit | 20 +- .../vendor/phpunit/phpunit/phpunit.xml | 48 +- .../vendor/phpunit/phpunit/phpunit.xsd | 36 +- .../vendor/phpunit/phpunit/src/Exception.php | 6 +- .../phpunit/src/Extensions/GroupTestSuite.php | 60 - .../phpunit/src/Extensions/PhptTestCase.php | 448 - .../phpunit/src/Extensions/PhptTestSuite.php | 40 - .../phpunit/src/Extensions/RepeatedTest.php | 90 - .../phpunit/src/Extensions/TestDecorator.php | 109 - .../phpunit/src/Extensions/TicketListener.php | 204 - .../phpunit/phpunit/src/Framework/Assert.php | 1400 +- .../src/Framework/Assert/Functions.php | 1252 +- .../src/Framework/AssertionFailedError.php | 6 +- .../src/Framework/BaseTestListener.php | 49 +- .../src/Framework/CodeCoverageException.php | 7 +- .../src/Framework/Constraint/ArrayHasKey.php | 11 +- .../src/Framework/Constraint/ArraySubset.php | 84 +- .../src/Framework/Constraint/Attribute.php | 21 +- .../src/Framework/Constraint/Callback.php | 13 +- .../Constraint/ClassHasAttribute.php | 15 +- .../Constraint/ClassHasStaticAttribute.php | 15 +- .../src/Framework/Constraint/Composite.php | 22 +- .../Framework/{ => Constraint}/Constraint.php | 30 +- .../src/Framework/Constraint/Count.php | 69 +- .../Framework/Constraint/DirectoryExists.php | 59 + .../src/Framework/Constraint/Exception.php | 21 +- .../Framework/Constraint/ExceptionCode.php | 11 +- .../Framework/Constraint/ExceptionMessage.php | 28 +- ... => ExceptionMessageRegularExpression.php} | 18 +- .../src/Framework/Constraint/FileExists.php | 9 +- .../src/Framework/Constraint/GreaterThan.php | 10 +- .../src/Framework/Constraint/IsAnything.php | 11 +- .../src/Framework/Constraint/IsEmpty.php | 13 +- .../src/Framework/Constraint/IsEqual.php | 69 +- .../src/Framework/Constraint/IsFalse.php | 5 +- .../src/Framework/Constraint/IsFinite.php | 7 +- .../src/Framework/Constraint/IsIdentical.php | 37 +- .../src/Framework/Constraint/IsInfinite.php | 7 +- .../src/Framework/Constraint/IsInstanceOf.php | 12 +- .../src/Framework/Constraint/IsJson.php | 17 +- .../src/Framework/Constraint/IsNan.php | 7 +- .../src/Framework/Constraint/IsNull.php | 5 +- .../src/Framework/Constraint/IsReadable.php | 59 + .../src/Framework/Constraint/IsTrue.php | 5 +- .../src/Framework/Constraint/IsType.php | 37 +- .../src/Framework/Constraint/IsWritable.php | 59 + .../src/Framework/Constraint/JsonMatches.php | 60 +- ...hp => JsonMatchesErrorMessageProvider.php} | 11 +- .../src/Framework/Constraint/LessThan.php | 10 +- .../Constraint/{And.php => LogicalAnd.php} | 37 +- .../Constraint/{Not.php => LogicalNot.php} | 73 +- .../Constraint/{Or.php => LogicalOr.php} | 31 +- .../Constraint/{Xor.php => LogicalXor.php} | 31 +- .../Constraint/ObjectHasAttribute.php | 7 +- .../{PCREMatch.php => RegularExpression.php} | 9 +- .../src/Framework/Constraint/SameSize.php | 8 +- .../Framework/Constraint/StringContains.php | 25 +- .../Framework/Constraint/StringEndsWith.php | 7 +- ...php => StringMatchesFormatDescription.php} | 68 +- .../Framework/Constraint/StringStartsWith.php | 7 +- .../Constraint/TraversableContains.php | 38 +- .../Constraint/TraversableContainsOnly.php | 16 +- .../CoveredCodeNotExecutedException.php} | 4 +- ...Provider.php => DataProviderTestSuite.php} | 8 +- .../phpunit/phpunit/src/Framework/Error.php | 34 - .../src/Framework/Error/Deprecated.php | 13 +- .../phpunit/src/Framework/Error/Error.php | 36 + .../phpunit/src/Framework/Error/Notice.php | 13 +- .../phpunit/src/Framework/Error/Warning.php | 13 +- .../phpunit/src/Framework/Exception.php | 15 +- .../src/Framework/ExceptionWrapper.php | 42 +- .../Framework/ExpectationFailedException.php | 19 +- .../phpunit/src/Framework/IncompleteTest.php | 6 +- .../src/Framework/IncompleteTestCase.php | 7 +- .../src/Framework/IncompleteTestError.php | 9 +- .../InvalidCoversTargetException.php | 6 +- .../MissingCoversAnnotationException.php | 15 + .../phpunit/src/Framework/OutputError.php | 9 +- ...mework_CoveredCodeNotExecutedException.php | 19 - ...ework_MissingCoversAnnotationException.php | 19 - .../phpunit/src/Framework/RiskyTest.php | 10 +- .../phpunit/src/Framework/RiskyTestError.php | 9 +- .../phpunit/src/Framework/SelfDescribing.php | 6 +- .../phpunit/src/Framework/SkippedTest.php | 9 +- .../phpunit/src/Framework/SkippedTestCase.php | 7 +- .../src/Framework/SkippedTestError.php | 10 +- .../src/Framework/SkippedTestSuiteError.php | 10 +- .../phpunit/src/Framework/SyntheticError.php | 6 +- .../phpunit/phpunit/src/Framework/Test.php | 14 +- .../phpunit/src/Framework/TestCase.php | 1345 +- .../phpunit/src/Framework/TestFailure.php | 70 +- .../phpunit/src/Framework/TestListener.php | 85 +- .../TestListenerDefaultImplementation.php | 53 + .../phpunit/src/Framework/TestResult.php | 485 +- .../phpunit/src/Framework/TestSuite.php | 392 +- .../{Util => Framework}/TestSuiteIterator.php | 21 +- .../UnintentionallyCoveredCodeError.php | 7 +- .../phpunit/phpunit/src/Framework/Warning.php | 7 +- .../phpunit/src/Framework/WarningTestCase.php | 13 +- .../phpunit/src/Runner/BaseTestRunner.php | 34 +- .../phpunit/phpunit/src/Runner/Exception.php | 6 +- ...ude.php => ExcludeGroupFilterIterator.php} | 13 +- .../phpunit/src/Runner/Filter/Factory.php | 18 +- .../{Group.php => GroupFilterIterator.php} | 30 +- ...ude.php => IncludeGroupFilterIterator.php} | 13 +- .../{Test.php => NameFilterIterator.php} | 46 +- .../phpunit/src/Runner/PhptTestCase.php | 613 + .../src/Runner/StandardTestSuiteLoader.php | 56 +- .../phpunit/src/Runner/TestSuiteLoader.php | 8 +- .../phpunit/phpunit/src/Runner/Version.php | 24 +- .../phpunit/phpunit/src/TextUI/Command.php | 995 +- .../phpunit/src/TextUI/ResultPrinter.php | 298 +- .../phpunit/phpunit/src/TextUI/TestRunner.php | 798 +- .../phpunit/phpunit/src/Util/Blacklist.php | 32 +- .../phpunit/src/Util/Configuration.php | 364 +- .../src/Util/ConfigurationGenerator.php | 14 +- .../phpunit/phpunit/src/Util/ErrorHandler.php | 49 +- .../phpunit/phpunit/src/Util/Fileloader.php | 36 +- .../phpunit/phpunit/src/Util/Filesystem.php | 10 +- .../phpunit/phpunit/src/Util/Filter.php | 36 +- .../phpunit/phpunit/src/Util/Getopt.php | 101 +- .../phpunit/phpunit/src/Util/GlobalState.php | 120 +- .../src/Util/InvalidArgumentHelper.php | 19 +- .../vendor/phpunit/phpunit/src/Util/Json.php | 78 + .../phpunit/phpunit/src/Util/Log/JSON.php | 260 - .../phpunit/phpunit/src/Util/Log/JUnit.php | 329 +- .../phpunit/phpunit/src/Util/Log/TAP.php | 271 - .../phpunit/phpunit/src/Util/Log/TeamCity.php | 187 +- .../{PHP.php => PHP/AbstractPhpProcess.php} | 100 +- .../{Default.php => DefaultPhpProcess.php} | 107 +- .../Util/PHP/Template/PhptTestCase.tpl.dist | 46 + .../Util/PHP/Template/TestCaseClass.tpl.dist | 107 + .../Util/PHP/Template/TestCaseMethod.tpl.dist | 15 +- .../{Windows.php => WindowsPhpProcess.php} | 10 +- .../phpunit/src/Util/PHP/eval-stdin.php | 11 +- .../phpunit/phpunit/src/Util/Printer.php | 72 +- .../vendor/phpunit/phpunit/src/Util/Regex.php | 26 - .../phpunit/src/Util/RegularExpression.php | 34 + .../phpunit/phpunit/src/Util/String.php | 71 - .../vendor/phpunit/phpunit/src/Util/Test.php | 697 +- .../HTML.php => HtmlResultPrinter.php} | 14 +- .../src/Util/TestDox/NamePrettifier.php | 48 +- .../src/Util/TestDox/ResultPrinter.php | 158 +- .../Text.php => TextResultPrinter.php} | 5 +- .../XML.php => XmlResultPrinter.php} | 106 +- .../phpunit/src/Util/TextTestListRenderer.php | 44 + .../vendor/phpunit/phpunit/src/Util/Type.php | 13 +- .../vendor/phpunit/phpunit/src/Util/XML.php | 155 +- .../phpunit/src/Util/XmlTestListRenderer.php | 82 + .../tests/Extensions/PhptTestCaseTest.php | 263 - .../tests/Extensions/RepeatedTestTest.php | 64 - .../phpunit/tests/Framework/AssertTest.php | 2996 +- .../tests/Framework/BaseTestListenerTest.php | 20 +- .../Framework/Constraint/ArraySubsetTest.php | 85 + .../tests/Framework/Constraint/CountTest.php | 111 +- .../Constraint/ExceptionMessageRegExpTest.php | 22 +- .../Constraint/ExceptionMessageTest.php | 24 +- .../tests/Framework/Constraint/IsJsonTest.php | 12 +- ...> JsonMatchesErrorMessageProviderTest.php} | 15 +- .../Framework/Constraint/JsonMatchesTest.php | 69 +- .../Framework/Constraint/LogicalAndTest.php | 40 + .../Framework/Constraint/LogicalOrTest.php | 40 + .../Framework/Constraint/LogicalXorTest.php | 44 + .../tests/Framework/ConstraintTest.php | 2216 +- .../phpunit/tests/Framework/SuiteTest.php | 156 +- .../phpunit/tests/Framework/TestCaseTest.php | 339 +- .../tests/Framework/TestFailureTest.php | 32 +- .../tests/Framework/TestImplementorTest.php | 16 +- .../tests/Framework/TestListenerTest.php | 36 +- .../phpunit/tests/Regression/GitHub/1149.phpt | 2 +- .../Regression/GitHub/1149/Issue1149Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1216.phpt | 6 +- .../Regression/GitHub/1216/Issue1216Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1265.phpt | 4 +- .../Regression/GitHub/1265/Issue1265Test.php | 4 +- .../Regression/GitHub/1265/phpunit1265.xml | 2 +- .../phpunit/tests/Regression/GitHub/1330.phpt | 6 +- .../Regression/GitHub/1330/Issue1330Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1335.phpt | 2 +- .../Regression/GitHub/1335/Issue1335Test.php | 8 +- .../phpunit/tests/Regression/GitHub/1337.phpt | 2 +- .../Regression/GitHub/1337/Issue1337Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1348.phpt | 5 +- .../Regression/GitHub/1348/Issue1348Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1351.phpt | 2 +- .../Regression/GitHub/1351/Issue1351Test.php | 8 +- .../phpunit/tests/Regression/GitHub/1374.phpt | 2 +- .../Regression/GitHub/1374/Issue1374Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1437.phpt | 2 +- .../Regression/GitHub/1437/Issue1437Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1468.phpt | 2 +- .../Regression/GitHub/1468/Issue1468Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1471.phpt | 4 +- .../Regression/GitHub/1471/Issue1471Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1472.phpt | 9 +- .../Regression/GitHub/1472/Issue1472Test.php | 4 +- .../phpunit/tests/Regression/GitHub/1570.phpt | 7 +- .../Regression/GitHub/1570/Issue1570Test.php | 4 +- .../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 | 2 +- .../Regression/GitHub/2158/Issue2158Test.php | 6 +- .../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 | 2 +- .../Regression/GitHub/244/Issue244Test.php | 4 +- .../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/322.phpt | 9 +- .../Regression/GitHub/322/Issue322Test.php | 6 +- .../phpunit/tests/Regression/GitHub/433.phpt | 2 +- .../Regression/GitHub/433/Issue433Test.php | 4 +- .../phpunit/tests/Regression/GitHub/445.phpt | 2 +- .../Regression/GitHub/445/Issue445Test.php | 4 +- .../phpunit/tests/Regression/GitHub/498.phpt | 2 +- .../Regression/GitHub/498/Issue498Test.php | 4 +- .../phpunit/tests/Regression/GitHub/503.phpt | 5 +- .../Regression/GitHub/503/Issue503Test.php | 4 +- .../phpunit/tests/Regression/GitHub/581.phpt | 8 +- .../Regression/GitHub/581/Issue581Test.php | 4 +- .../phpunit/tests/Regression/GitHub/74.phpt | 4 +- .../Regression/GitHub/74/Issue74Test.php | 4 +- .../phpunit/tests/Regression/GitHub/765.phpt | 2 +- .../Regression/GitHub/765/Issue765Test.php | 4 +- .../phpunit/tests/Regression/GitHub/797.phpt | 2 +- .../Regression/GitHub/797/Issue797Test.php | 4 +- .../phpunit/tests/Regression/GitHub/863.phpt | 2 +- .../tests/Regression/GitHub/873-php5.phpt | 22 - .../GitHub/{873-php7.phpt => 873.phpt} | 2 +- .../phpunit/tests/Regression/Trac/1021.phpt | 4 +- .../Regression/Trac/1021/Issue1021Test.php | 5 +- .../phpunit/tests/Regression/Trac/523.phpt | 2 +- .../Regression/Trac/523/Issue523Test.php | 6 +- .../phpunit/tests/Regression/Trac/578.phpt | 2 +- .../Regression/Trac/578/Issue578Test.php | 4 +- .../phpunit/tests/Regression/Trac/684.phpt | 2 +- .../Regression/Trac/684/Issue684Test.php | 4 +- .../phpunit/tests/Regression/Trac/783.phpt | 4 +- .../tests/Regression/Trac/783/ChildSuite.php | 8 +- .../tests/Regression/Trac/783/OneTest.php | 5 +- .../tests/Regression/Trac/783/ParentSuite.php | 4 +- .../tests/Regression/Trac/783/TwoTest.php | 5 +- .../tests/Runner/BaseTestRunnerTest.php | 22 - .../phpunit/tests/Runner/PhptTestCaseTest.php | 321 + .../tests/TextUI/abstract-test-class.phpt | 2 +- .../phpunit/tests/TextUI/assertion.phpt | 2 +- .../tests/TextUI/code-coverage-ignore.phpt | 4 +- .../tests/TextUI/code-coverage-phpt.phpt | 43 + .../phpunit/tests/TextUI/colors-always.phpt | 2 +- .../tests/TextUI/concrete-test-class.phpt | 4 +- .../tests/TextUI/custom-printer-debug.phpt | 14 +- .../tests/TextUI/custom-printer-verbose.phpt | 2 +- .../tests/TextUI/dataprovider-debug.phpt | 30 +- .../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 | 16 +- .../tests/TextUI/dataprovider-log-xml.phpt | 16 +- .../tests/TextUI/dataprovider-testdox.phpt | 2 +- .../phpunit/phpunit/tests/TextUI/debug.phpt | 14 +- .../tests/TextUI/default-isolation.phpt | 2 +- .../phpunit/phpunit/tests/TextUI/default.phpt | 2 +- .../defaulttestsuite-using-testsuite.phpt | 17 + .../tests/TextUI/defaulttestsuite.phpt | 15 + .../tests/TextUI/dependencies-clone.phpt | 6 +- .../tests/TextUI/dependencies-isolation.phpt | 4 +- .../phpunit/tests/TextUI/dependencies.phpt | 4 +- .../tests/TextUI/dependencies2-isolation.phpt | 2 +- .../phpunit/tests/TextUI/dependencies2.phpt | 2 +- .../tests/TextUI/dependencies3-isolation.phpt | 4 +- .../phpunit/tests/TextUI/dependencies3.phpt | 4 +- .../TextUI/disable-code-coverage-ignore.phpt | 2 +- .../phpunit/tests/TextUI/empty-testcase.phpt | 2 +- .../phpunit/tests/TextUI/exception-stack.phpt | 6 +- .../tests/TextUI/exclude-group-isolation.phpt | 2 +- .../phpunit/tests/TextUI/exclude-group.phpt | 2 +- .../tests/TextUI/failure-isolation.phpt | 20 +- .../tests/TextUI/failure-reverse-list.phpt | 22 +- .../phpunit/phpunit/tests/TextUI/failure.phpt | 20 +- .../phpunit/tests/TextUI/fatal-isolation.phpt | 2 +- .../tests/TextUI/filter-class-isolation.phpt | 2 +- .../phpunit/tests/TextUI/filter-class.phpt | 2 +- ...ider-by-classname-and-range-isolation.phpt | 2 +- ...r-dataprovider-by-classname-and-range.phpt | 2 +- ...lter-dataprovider-by-number-isolation.phpt | 2 +- .../TextUI/filter-dataprovider-by-number.phpt | 2 +- ...-dataprovider-by-only-range-isolation.phpt | 2 +- .../filter-dataprovider-by-only-range.phpt | 2 +- ...dataprovider-by-only-regexp-isolation.phpt | 2 +- .../filter-dataprovider-by-only-regexp.phpt | 2 +- ...dataprovider-by-only-string-isolation.phpt | 2 +- .../filter-dataprovider-by-only-string.phpt | 2 +- ...ilter-dataprovider-by-range-isolation.phpt | 2 +- .../TextUI/filter-dataprovider-by-range.phpt | 2 +- ...lter-dataprovider-by-regexp-isolation.phpt | 2 +- .../TextUI/filter-dataprovider-by-regexp.phpt | 2 +- ...lter-dataprovider-by-string-isolation.phpt | 2 +- .../TextUI/filter-dataprovider-by-string.phpt | 2 +- .../filter-method-case-insensitive.phpt | 2 +- ...ilter-method-case-sensitive-no-result.phpt | 2 +- .../tests/TextUI/filter-method-isolation.phpt | 2 +- .../phpunit/tests/TextUI/filter-method.phpt | 2 +- .../tests/TextUI/filter-no-results.phpt | 2 +- .../tests/TextUI/forward-compatibility.phpt | 2 +- .../phpunit/tests/TextUI/group-isolation.phpt | 2 +- .../phpunit/phpunit/tests/TextUI/group.phpt | 2 +- .../phpunit/phpunit/tests/TextUI/help.phpt | 138 +- .../phpunit/phpunit/tests/TextUI/help2.phpt | 138 +- .../phpunit/tests/TextUI/ini-isolation.phpt | 2 +- .../phpunit/tests/TextUI/list-groups.phpt | 2 +- .../phpunit/tests/TextUI/list-suites.phpt | 2 +- .../tests/TextUI/list-tests-dataprovider.phpt | 19 + .../TextUI/list-tests-xml-dataprovider.phpt | 31 + .../tests/TextUI/log-json-post-66021.phpt | 71 - .../phpunit/tests/TextUI/log-junit.phpt | 89 + .../phpunit/phpunit/tests/TextUI/log-tap.phpt | 25 - .../phpunit/tests/TextUI/log-teamcity.phpt | 10 +- .../phpunit/phpunit/tests/TextUI/log-xml.phpt | 28 - .../phpunit/tests/TextUI/mycommand.phpt | 23 + .../tests/TextUI/options-after-arguments.phpt | 2 +- .../tests/TextUI/output-isolation.phpt | 2 +- .../TextUI/phar-extension-suppressed.phpt | 12 + .../phpunit/tests/TextUI/phar-extension.phpt | 21 + .../phpunit/tests/TextUI/phpt-xfail.phpt | 2 +- .../phpunit/phpunit/tests/TextUI/repeat.phpt | 2 +- .../report-useless-tests-incomplete.phpt | 9 +- .../report-useless-tests-isolation.phpt | 16 +- .../tests/TextUI/report-useless-tests.phpt | 14 +- .../tests/TextUI/stop-on-warning-via-cli.phpt | 2 +- .../TextUI/stop-on-warning-via-config.phpt | 2 +- .../phpunit/phpunit/tests/TextUI/tap.phpt | 17 - .../TextUI/teamcity-inner-exceptions.phpt | 39 + .../phpunit/tests/TextUI/teamcity.phpt | 10 +- .../tests/TextUI/test-suffix-multiple.phpt | 4 +- .../tests/TextUI/test-suffix-single.phpt | 2 +- .../tests/TextUI/testdox-exclude-group.phpt | 4 +- .../phpunit/tests/TextUI/testdox-group.phpt | 4 +- .../phpunit/tests/TextUI/testdox-html.phpt | 2 +- .../phpunit/tests/TextUI/testdox-text.phpt | 2 +- .../phpunit/tests/TextUI/testdox-xml.phpt | 54 +- .../phpunit/phpunit/tests/TextUI/testdox.phpt | 2 +- .../phpunit/tests/Util/ConfigurationTest.php | 218 +- .../phpunit/phpunit/tests/Util/GetoptTest.php | 163 +- .../phpunit/tests/Util/GlobalStateTest.php | 17 +- .../phpunit/phpunit/tests/Util/JsonTest.php | 79 + .../tests/Util/PHP/AbstractPhpProcessTest.php | 124 + .../phpunit/phpunit/tests/Util/PHPTest.php | 133 - ...egexTest.php => RegularExpressionTest.php} | 15 +- .../tests/Util/TestDox/NamePrettifierTest.php | 29 +- .../phpunit/phpunit/tests/Util/TestTest.php | 604 +- .../phpunit/phpunit/tests/Util/XMLTest.php | 91 +- .../phpunit/tests/_files/AbstractTest.php | 5 +- .../phpunit/tests/_files/ArrayAccessible.php | 40 + .../tests/_files/AssertionExampleTest.php | 4 +- .../phpunit/phpunit/tests/_files/Author.php | 2 - .../phpunit/tests/_files/BankAccount.php | 2 - .../phpunit/tests/_files/BankAccountTest.php | 5 +- .../tests/_files/BankAccountTest.test.php | 5 +- .../tests/_files/BaseTestListenerSample.php | 7 +- .../tests/_files/BeforeAndAfterTest.php | 4 +- .../_files/BeforeClassAndAfterClassTest.php | 4 +- .../BeforeClassWithOnlyDataProviderTest.php | 2 +- .../phpunit/phpunit/tests/_files/Book.php | 2 - .../ChangeCurrentWorkingDirectoryTest.php | 4 +- .../tests/_files/ClassWithToString.php | 2 - .../tests/_files/ClonedDependencyTest.php | 24 +- .../phpunit/tests/_files/ConcreteTest.my.php | 1 + .../phpunit/tests/_files/ConcreteTest.php | 1 + .../_files/CoverageClassExtendedTest.php | 4 +- .../tests/_files/CoverageClassTest.php | 4 +- .../CoverageFunctionParenthesesTest.php | 4 +- ...erageFunctionParenthesesWhitespaceTest.php | 4 +- .../tests/_files/CoverageFunctionTest.php | 4 +- .../CoverageMethodOneLineAnnotationTest.php | 4 +- .../_files/CoverageMethodParenthesesTest.php | 4 +- ...overageMethodParenthesesWhitespaceTest.php | 4 +- .../tests/_files/CoverageMethodTest.php | 4 +- .../_files/CoverageNamespacedFunctionTest.php | 4 +- .../phpunit/tests/_files/CoverageNoneTest.php | 4 +- .../tests/_files/CoverageNotPrivateTest.php | 4 +- .../tests/_files/CoverageNotProtectedTest.php | 4 +- .../tests/_files/CoverageNotPublicTest.php | 4 +- .../tests/_files/CoverageNothingTest.php | 4 +- .../tests/_files/CoveragePrivateTest.php | 4 +- .../tests/_files/CoverageProtectedTest.php | 4 +- .../tests/_files/CoveragePublicTest.php | 4 +- .../phpunit/tests/_files/CustomPrinter.php | 4 +- .../tests/_files/DataProviderDebugTest.php | 4 +- .../_files/DataProviderDependencyTest.php | 24 + .../tests/_files/DataProviderFilterTest.php | 4 +- .../_files/DataProviderIncompleteTest.php | 4 +- .../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 | 4 +- .../phpunit/tests/_files/DataProviderTest.php | 4 +- .../tests/_files/DataProviderTestDoxTest.php | 6 +- .../tests/_files/DependencyFailureTest.php | 7 +- .../tests/_files/DependencySuccessTest.php | 7 +- .../tests/_files/DependencyTestSuite.php | 8 +- .../phpunit/tests/_files/DoubleTestCase.php | 10 +- .../phpunit/tests/_files/DummyBarTest.php | 18 + .../phpunit/tests/_files/DummyFooTest.php | 18 + .../tests/_files/EmptyTestCaseTest.php | 4 +- .../ExceptionInAssertPostConditionsTest.php | 4 +- .../ExceptionInAssertPreConditionsTest.php | 4 +- .../tests/_files/ExceptionInSetUpTest.php | 4 +- .../tests/_files/ExceptionInTearDownTest.php | 4 +- .../phpunit/tests/_files/ExceptionInTest.php | 4 +- .../tests/_files/ExceptionNamespaceTest.php | 2 +- .../tests/_files/ExceptionStackTest.php | 11 +- .../phpunit/tests/_files/ExceptionTest.php | 4 +- .../phpunit/phpunit/tests/_files/Failure.php | 4 +- .../phpunit/tests/_files/FailureTest.php | 12 +- .../phpunit/tests/_files/FatalTest.php | 4 +- .../_files/IgnoreCodeCoverageClassTest.php | 4 +- .../phpunit/tests/_files/IncompleteTest.php | 4 +- .../tests/_files/Inheritance/InheritanceA.php | 2 +- .../tests/_files/Inheritance/InheritanceB.php | 4 +- .../phpunit/phpunit/tests/_files/IniTest.php | 4 +- .../phpunit/tests/_files/IsolationTest.php | 4 +- .../phpunit/tests/_files/MockRunner.php | 4 +- .../tests/_files/MultiDependencyTest.php | 8 +- .../tests/_files/MultipleDataProviderTest.php | 77 + .../phpunit/tests/_files/MyCommand.php | 16 + .../NamespaceCoverageClassExtendedTest.php | 4 +- .../_files/NamespaceCoverageClassTest.php | 4 +- ...NamespaceCoverageCoversClassPublicTest.php | 4 +- .../NamespaceCoverageCoversClassTest.php | 4 +- .../_files/NamespaceCoverageMethodTest.php | 4 +- .../NamespaceCoverageNotPrivateTest.php | 4 +- .../NamespaceCoverageNotProtectedTest.php | 4 +- .../_files/NamespaceCoverageNotPublicTest.php | 4 +- .../_files/NamespaceCoveragePrivateTest.php | 4 +- .../_files/NamespaceCoverageProtectedTest.php | 4 +- .../_files/NamespaceCoveragePublicTest.php | 4 +- .../tests/_files/NoArgTestCaseTest.php | 4 +- .../phpunit/tests/_files/NoTestCases.php | 4 +- .../phpunit/tests/_files/NonStatic.php | 1 - .../_files/NotExistingCoveredElementTest.php | 4 +- .../tests/_files/NotPublicTestCase.php | 4 +- .../phpunit/tests/_files/NotVoidTestCase.php | 4 +- .../phpunit/tests/_files/NothingTest.php | 4 +- .../phpunit/tests/_files/OneTestCase.php | 4 +- .../phpunit/tests/_files/OutputTestCase.php | 4 +- .../_files/ParseTestMethodAnnotationsMock.php | 15 + .../RequirementsClassBeforeClassHookTest.php | 3 +- .../phpunit/tests/_files/RequirementsTest.php | 110 +- .../phpunit/tests/_files/SampleClass.php | 4 +- .../phpunit/tests/_files/StackTest.php | 14 +- .../phpunit/tests/_files/StatusTest.php | 42 + .../tests/_files/StopOnWarningTestSuite.php | 8 +- .../tests/_files/StopsOnWarningTest.php | 4 +- .../phpunit/phpunit/tests/_files/Success.php | 5 +- .../tests/_files/TemplateMethodsTest.php | 8 +- .../tests/_files/TestAutoreferenced.php | 12 + .../phpunit/tests/_files/TestDoxGroupTest.php | 6 +- .../tests/_files/TestGeneratorMaker.php | 10 + .../phpunit/tests/_files/TestIncomplete.php | 4 +- .../tests/_files/TestIteratorAggregate.php | 16 + .../tests/_files/TestIteratorAggregate2.php | 19 + .../phpunit/tests/_files/TestSkipped.php | 4 +- .../phpunit/tests/_files/TestTestError.php | 4 +- .../phpunit/tests/_files/TestWithTest.php | 4 +- .../tests/_files/ThrowExceptionTestCase.php | 4 +- .../tests/_files/ThrowNoExceptionTestCase.php | 4 +- .../VariousIterableDataProviderTest.php | 38 + .../phpunit/phpunit/tests/_files/WasRun.php | 4 +- .../tests/_files/WrapperIteratorAggregate.php | 22 + .../_files/configuration.defaulttestsuite.xml | 10 + .../_files/configuration.one-file-suite.xml | 7 + .../phpunit/tests/_files/configuration.xml | 12 +- .../tests/_files/configuration_empty.xml | 2 +- .../tests/_files/configuration_xinclude.xml | 10 +- .../phpunit-example-extension/phpunit.xml | 10 + .../tests/OneTest.php | 13 + .../phpunit-example-extension-1.0.1.phar | Bin 0 -> 6464 bytes .../phpunit/phpunit/tests/bootstrap.php | 28 +- lib/composer/vendor/psr/container/.gitignore | 3 + lib/composer/vendor/psr/container/LICENSE | 21 + lib/composer/vendor/psr/container/README.md | 5 + .../vendor/psr/container/composer.json | 27 + .../src/ContainerExceptionInterface.php | 13 + .../psr/container/src/ContainerInterface.php | 37 + .../src/NotFoundExceptionInterface.php | 13 + .../code-unit-reverse-lookup/.gitignore | 12 +- .../code-unit-reverse-lookup/.travis.yml | 15 +- .../code-unit-reverse-lookup/LICENSE | 2 +- .../code-unit-reverse-lookup/README.md | 13 +- .../code-unit-reverse-lookup/build.xml | 27 +- .../code-unit-reverse-lookup/composer.json | 4 +- .../tests/WizardTest.php | 4 +- .../vendor/sebastian/comparator/.gitignore | 6 +- .../vendor/sebastian/comparator/.php_cs | 81 + .../vendor/sebastian/comparator/.travis.yml | 43 +- .../vendor/sebastian/comparator/ChangeLog.md | 19 + .../vendor/sebastian/comparator/LICENSE | 2 +- .../vendor/sebastian/comparator/README.md | 4 +- .../vendor/sebastian/comparator/build.xml | 47 +- .../sebastian/comparator/build/travis-ci.xml | 11 - .../vendor/sebastian/comparator/composer.json | 22 +- .../vendor/sebastian/comparator/phpunit.xml | 18 + .../sebastian/comparator/phpunit.xml.dist | 21 - .../comparator/src/ArrayComparator.php | 63 +- .../sebastian/comparator/src/Comparator.php | 23 +- .../comparator/src/ComparisonFailure.php | 8 +- .../comparator/src/DOMNodeComparator.php | 59 +- .../comparator/src/DateTimeComparator.php | 51 +- .../comparator/src/DoubleComparator.php | 25 +- .../comparator/src/ExceptionComparator.php | 8 +- .../sebastian/comparator/src/Factory.php | 94 +- .../comparator/src/MockObjectComparator.php | 13 +- .../comparator/src/NumericComparator.php | 25 +- .../comparator/src/ObjectComparator.php | 36 +- .../comparator/src/ResourceComparator.php | 23 +- .../comparator/src/ScalarComparator.php | 24 +- .../src/SplObjectStorageComparator.php | 23 +- .../comparator/src/TypeComparator.php | 23 +- .../comparator/tests/ArrayComparatorTest.php | 156 +- .../tests/ComparisonFailureTest.php | 58 + .../tests/DOMNodeComparatorTest.php | 88 +- .../tests/DateTimeComparatorTest.php | 127 +- .../comparator/tests/DoubleComparatorTest.php | 100 +- .../tests/ExceptionComparatorTest.php | 73 +- .../comparator/tests/FactoryTest.php | 108 +- .../tests/MockObjectComparatorTest.php | 121 +- .../tests/NumericComparatorTest.php | 76 +- .../comparator/tests/ObjectComparatorTest.php | 89 +- .../tests/ResourceComparatorTest.php | 51 +- .../comparator/tests/ScalarComparatorTest.php | 142 +- .../tests/SplObjectStorageComparatorTest.php | 61 +- .../comparator/tests/TypeComparatorTest.php | 67 +- .../tests/{_files => _fixture}/Author.php | 3 +- .../tests/{_files => _fixture}/Book.php | 1 - .../ClassWithToString.php | 0 .../{_files => _fixture}/SampleClass.php | 1 - .../tests/{_files => _fixture}/Struct.php | 1 - .../tests/{_files => _fixture}/TestClass.php | 3 +- .../TestClassComparator.php | 3 +- .../sebastian/comparator/tests/autoload.php | 38 - .../sebastian/comparator/tests/bootstrap.php | 7 - lib/composer/vendor/sebastian/diff/.gitignore | 15 +- lib/composer/vendor/sebastian/diff/.php_cs | 143 +- .../vendor/sebastian/diff/.travis.yml | 31 +- .../vendor/sebastian/diff/ChangeLog.md | 22 + lib/composer/vendor/sebastian/diff/LICENSE | 4 +- lib/composer/vendor/sebastian/diff/README.md | 14 +- lib/composer/vendor/sebastian/diff/build.xml | 40 +- .../vendor/sebastian/diff/composer.json | 6 +- .../vendor/sebastian/diff/phpunit.xml | 19 + .../vendor/sebastian/diff/phpunit.xml.dist | 17 - .../vendor/sebastian/diff/src/Chunk.php | 54 +- .../vendor/sebastian/diff/src/Diff.php | 22 +- .../vendor/sebastian/diff/src/Differ.php | 364 +- .../diff/src/Exception/Exception.php | 15 + .../Exception/InvalidArgumentException.php | 15 + ...LongestCommonSubsequenceImplementation.php | 93 - .../vendor/sebastian/diff/src/Line.php | 24 +- ...=> LongestCommonSubsequenceCalculator.php} | 13 +- ...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 | 63 +- ...entLongestCommonSubsequenceCalculator.php} | 35 +- .../vendor/sebastian/diff/tests/ChunkTest.php | 68 + .../vendor/sebastian/diff/tests/DiffTest.php | 55 + .../sebastian/diff/tests/DifferTest.php | Bin 11492 -> 29739 bytes .../sebastian/diff/tests/DifferTestTest.php | 83 + .../LCS/TimeEfficientImplementationTest.php | 175 - .../vendor/sebastian/diff/tests/LineTest.php | 44 + .../tests/LongestCommonSubsequenceTest.php | 201 + .../MemoryEfficientImplementationTest.php | 22 + .../sebastian/diff/tests/ParserTest.php | 113 +- .../tests/TimeEfficientImplementationTest.php | 22 + .../vendor/sebastian/environment/.gitignore | 1 + .../vendor/sebastian/environment/.php_cs | 79 + .../vendor/sebastian/environment/.travis.yml | 34 +- .../vendor/sebastian/environment/ChangeLog.md | 51 + .../vendor/sebastian/environment/LICENSE | 4 +- .../vendor/sebastian/environment/README.md | 71 +- .../vendor/sebastian/environment/build.xml | 27 +- .../sebastian/environment/composer.json | 7 +- .../vendor/sebastian/environment/phpunit.xml | 6 +- .../sebastian/environment/src/Console.php | 139 +- .../environment/src/OperatingSystem.php | 51 + .../sebastian/environment/src/Runtime.php | 148 +- .../environment/tests/ConsoleTest.php | 35 +- .../environment/tests/OperatingSystemTest.php | 39 + .../environment/tests/RuntimeTest.php | 72 +- .../vendor/sebastian/exporter/.gitignore | 13 +- .../vendor/sebastian/exporter/.php_cs | 77 + .../vendor/sebastian/exporter/.travis.yml | 37 +- .../vendor/sebastian/exporter/LICENSE | 2 +- .../vendor/sebastian/exporter/README.md | 13 +- .../vendor/sebastian/exporter/build.xml | 28 +- .../vendor/sebastian/exporter/composer.json | 8 +- .../vendor/sebastian/exporter/phpunit.xml | 19 + .../sebastian/exporter/phpunit.xml.dist | 21 - .../sebastian/exporter/src/Exporter.php | 63 +- .../sebastian/exporter/tests/ExporterTest.php | 141 +- .../vendor/sebastian/global-state/.gitignore | 10 +- .../vendor/sebastian/global-state/.php_cs | 79 + .../vendor/sebastian/global-state/.travis.yml | 24 +- .../vendor/sebastian/global-state/LICENSE | 4 +- .../vendor/sebastian/global-state/README.md | 13 +- .../vendor/sebastian/global-state/build.xml | 47 +- .../sebastian/global-state/composer.json | 9 +- .../vendor/sebastian/global-state/phpunit.xml | 24 + .../sebastian/global-state/phpunit.xml.dist | 21 - .../sebastian/global-state/src/Blacklist.php | 98 +- .../global-state/src/CodeExporter.php | 59 +- .../sebastian/global-state/src/Restorer.php | 36 +- .../sebastian/global-state/src/Snapshot.php | 165 +- .../src/{ => exceptions}/Exception.php | 6 +- .../src/{ => exceptions}/RuntimeException.php | 6 +- .../global-state/tests/BlacklistTest.php | 33 +- .../global-state/tests/CodeExporterTest.php | 38 + .../global-state/tests/RestorerTest.php | 105 + .../global-state/tests/SnapshotTest.php | 101 +- .../tests/_fixture/BlacklistedChildClass.php | 6 +- .../tests/_fixture/BlacklistedClass.php | 6 +- .../tests/_fixture/BlacklistedImplementor.php | 6 +- .../tests/_fixture/BlacklistedInterface.php | 6 +- .../tests/_fixture/SnapshotClass.php | 16 +- .../tests/_fixture/SnapshotDomDocument.php | 6 +- .../tests/_fixture/SnapshotFunctions.php | 4 +- .../tests/_fixture/SnapshotTrait.php | 6 +- .../sebastian/object-enumerator/.travis.yml | 18 +- .../sebastian/object-enumerator/ChangeLog.md | 46 +- .../sebastian/object-enumerator/LICENSE | 2 +- .../sebastian/object-enumerator/README.md | 13 +- .../sebastian/object-enumerator/build.xml | 27 +- .../sebastian/object-enumerator/composer.json | 14 +- .../sebastian/object-enumerator/phpunit.xml | 5 +- .../object-enumerator/src/Enumerator.php | 11 +- .../tests/EnumeratorTest.php | 18 +- .../tests/_fixture/ExceptionThrower.php | 28 + .../object-reflector}/.gitignore | 4 +- .../vendor/sebastian/object-reflector/.php_cs | 79 + .../sebastian/object-reflector/.travis.yml | 26 + .../sebastian/object-reflector/ChangeLog.md | 20 + .../vendor/sebastian/object-reflector/LICENSE | 33 + .../sebastian/object-reflector/README.md | 14 + .../sebastian/object-reflector/build.xml | 22 + .../sebastian/object-reflector/composer.json | 33 + .../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 + .../sebastian/recursion-context/.gitignore | 12 +- .../sebastian/recursion-context/.travis.yml | 22 +- .../sebastian/recursion-context/LICENSE | 2 +- .../sebastian/recursion-context/build.xml | 28 +- .../sebastian/recursion-context/composer.json | 6 +- .../sebastian/recursion-context/phpunit.xml | 19 + .../recursion-context/phpunit.xml.dist | 20 - .../recursion-context/tests/ContextTest.php | 18 +- .../vendor/sebastian/version/README.md | 8 +- .../vendor/symfony/console/Application.php | 518 +- .../vendor/symfony/console/CHANGELOG.md | 33 + .../symfony/console/Command/Command.php | 108 +- .../symfony/console/Command/HelpCommand.php | 5 - .../symfony/console/Command/LockableTrait.php | 72 + .../CommandLoader/CommandLoaderInterface.php | 37 + .../CommandLoader/ContainerCommandLoader.php | 55 + .../CommandLoader/FactoryCommandLoader.php | 62 + .../vendor/symfony/console/ConsoleEvents.php | 19 +- .../AddConsoleCommandPass.php | 106 + .../Descriptor/ApplicationDescription.php | 18 +- .../symfony/console/Descriptor/Descriptor.php | 15 - .../console/Descriptor/JsonDescriptor.php | 36 +- .../console/Descriptor/MarkdownDescriptor.php | 73 +- .../console/Descriptor/TextDescriptor.php | 107 +- .../console/Descriptor/XmlDescriptor.php | 20 +- .../console/Event/ConsoleCommandEvent.php | 2 - .../console/Event/ConsoleErrorEvent.php | 83 + .../symfony/console/Event/ConsoleEvent.php | 4 +- .../console/Event/ConsoleExceptionEvent.php | 4 + .../console/EventListener/ErrorListener.php | 91 + .../Exception/CommandNotFoundException.php | 8 +- .../console/Formatter/OutputFormatter.php | 78 +- .../Formatter/OutputFormatterInterface.php | 2 + .../Formatter/OutputFormatterStyle.php | 4 +- .../OutputFormatterStyleInterface.php | 2 - .../Formatter/OutputFormatterStyleStack.php | 16 +- .../console/Helper/DescriptorHelper.php | 5 +- .../vendor/symfony/console/Helper/Helper.php | 33 +- .../console/Helper/HelperInterface.php | 2 - .../symfony/console/Helper/HelperSet.php | 7 - .../symfony/console/Helper/ProcessHelper.php | 5 +- .../symfony/console/Helper/ProgressBar.php | 79 +- .../console/Helper/ProgressIndicator.php | 19 +- .../symfony/console/Helper/QuestionHelper.php | 74 +- .../console/Helper/SymfonyQuestionHelper.php | 6 +- .../vendor/symfony/console/Helper/Table.php | 56 +- .../symfony/console/Helper/TableCell.php | 11 +- .../symfony/console/Helper/TableSeparator.php | 3 - .../symfony/console/Helper/TableStyle.php | 18 +- .../symfony/console/Input/ArgvInput.php | 40 +- .../symfony/console/Input/ArrayInput.php | 26 +- .../vendor/symfony/console/Input/Input.php | 29 +- .../symfony/console/Input/InputArgument.php | 2 - .../symfony/console/Input/InputDefinition.php | 14 +- .../symfony/console/Input/InputInterface.php | 4 +- .../symfony/console/Input/InputOption.php | 4 - .../Input/StreamableInputInterface.php | 37 + .../symfony/console/Input/StringInput.php | 2 - lib/composer/vendor/symfony/console/LICENSE | 2 +- .../symfony/console/Logger/ConsoleLogger.php | 62 +- .../symfony/console/Output/BufferedOutput.php | 5 +- .../symfony/console/Output/ConsoleOutput.php | 5 - .../console/Output/ConsoleOutputInterface.php | 5 - .../vendor/symfony/console/Output/Output.php | 2 - .../console/Output/OutputInterface.php | 5 - .../symfony/console/Output/StreamOutput.php | 2 - .../console/Question/ChoiceQuestion.php | 14 +- .../console/Question/ConfirmationQuestion.php | 2 - .../symfony/console/Question/Question.php | 26 +- .../symfony/console/Style/OutputStyle.php | 13 +- .../symfony/console/Style/StyleInterface.php | 5 - .../symfony/console/Style/SymfonyStyle.php | 44 +- .../vendor/symfony/console/Terminal.php | 137 + .../symfony/console/Tester/CommandTester.php | 40 +- .../symfony/console/Tests/ApplicationTest.php | 619 +- .../console/Tests/Command/CommandTest.php | 86 +- .../console/Tests/Command/HelpCommandTest.php | 3 +- .../console/Tests/Command/ListCommandTest.php | 5 +- .../Tests/Command/LockableTraitTest.php | 67 + .../ContainerCommandLoaderTest.php | 61 + .../FactoryCommandLoaderTest.php | 60 + .../AddConsoleCommandPassTest.php | 187 + .../Descriptor/AbstractDescriptorTest.php | 9 +- .../Tests/Descriptor/JsonDescriptorTest.php | 4 +- .../Descriptor/MarkdownDescriptorTest.php | 18 + .../Tests/Descriptor/ObjectsProvider.php | 5 + .../Tests/Descriptor/TextDescriptorTest.php | 26 + .../Tests/EventListener/ErrorListenerTest.php | 156 + .../Tests/Fixtures/DescriptorApplication2.php | 2 + .../DescriptorApplicationMbString.php | 24 + .../Tests/Fixtures/DescriptorCommand3.php | 27 + .../Tests/Fixtures/DescriptorCommand4.php | 25 + .../Fixtures/DescriptorCommandMbString.php | 32 + .../console/Tests/Fixtures/DummyOutput.php | 2 +- .../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 + .../Style/SymfonyStyle/command/command_0.php | 4 +- .../Style/SymfonyStyle/command/command_1.php | 4 +- .../Style/SymfonyStyle/command/command_10.php | 4 +- .../Style/SymfonyStyle/command/command_11.php | 4 +- .../Style/SymfonyStyle/command/command_12.php | 4 +- .../Style/SymfonyStyle/command/command_13.php | 1 - .../Style/SymfonyStyle/command/command_14.php | 4 +- .../Style/SymfonyStyle/command/command_15.php | 4 +- .../Style/SymfonyStyle/command/command_16.php | 4 +- .../Style/SymfonyStyle/command/command_17.php | 13 + .../Style/SymfonyStyle/command/command_2.php | 4 +- .../Style/SymfonyStyle/command/command_3.php | 4 +- .../Style/SymfonyStyle/command/command_4.php | 4 +- .../Style/SymfonyStyle/command/command_5.php | 6 +- .../Style/SymfonyStyle/command/command_6.php | 4 +- .../Style/SymfonyStyle/command/command_7.php | 4 +- .../Style/SymfonyStyle/command/command_8.php | 4 +- .../Style/SymfonyStyle/command/command_9.php | 4 +- .../command/interactive_command_1.php | 19 + .../output/interactive_output_1.txt | 7 + .../Style/SymfonyStyle/output/output_17.txt | 7 + .../console/Tests/Fixtures/TestTiti.php | 21 + .../console/Tests/Fixtures/TestToto.php | 22 + .../console/Tests/Fixtures/application_1.json | 2 + .../console/Tests/Fixtures/application_1.md | 149 +- .../console/Tests/Fixtures/application_1.txt | 2 +- .../console/Tests/Fixtures/application_1.xml | 4 +- .../console/Tests/Fixtures/application_2.json | 175 +- .../console/Tests/Fixtures/application_2.md | 381 +- .../console/Tests/Fixtures/application_2.txt | 7 +- .../console/Tests/Fixtures/application_2.xml | 78 +- .../application_filtered_namespace.txt | 16 + .../Tests/Fixtures/application_gethelp.txt | 2 +- .../Tests/Fixtures/application_mbstring.md | 269 + .../Tests/Fixtures/application_mbstring.txt | 19 + .../Fixtures/application_renderexception1.txt | 7 +- .../Fixtures/application_renderexception2.txt | 7 +- .../Fixtures/application_renderexception3.txt | 18 +- .../application_renderexception3decorated.txt | 20 +- .../Fixtures/application_renderexception4.txt | 9 +- ...plication_renderexception_doublewidth1.txt | 2 +- ..._renderexception_doublewidth1decorated.txt | 2 +- ...plication_renderexception_doublewidth2.txt | 2 +- ...plication_renderexception_escapeslines.txt | 9 + ...application_renderexception_linebreaks.txt | 11 + .../Tests/Fixtures/application_run2.txt | 32 +- .../console/Tests/Fixtures/command_1.json | 1 + .../console/Tests/Fixtures/command_1.md | 15 +- .../console/Tests/Fixtures/command_1.xml | 2 +- .../console/Tests/Fixtures/command_2.json | 1 + .../console/Tests/Fixtures/command_2.md | 28 +- .../console/Tests/Fixtures/command_2.txt | 6 +- .../console/Tests/Fixtures/command_2.xml | 2 +- .../Tests/Fixtures/command_mbstring.md | 29 + .../Tests/Fixtures/command_mbstring.txt | 13 + .../Tests/Fixtures/input_argument_1.md | 4 +- .../Tests/Fixtures/input_argument_2.md | 6 +- .../Tests/Fixtures/input_argument_3.md | 6 +- .../Tests/Fixtures/input_argument_4.md | 8 +- .../Tests/Fixtures/input_argument_4.txt | 2 +- ...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_2.md | 6 +- .../Tests/Fixtures/input_definition_3.md | 7 +- .../Tests/Fixtures/input_definition_4.md | 13 +- .../console/Tests/Fixtures/input_option_1.md | 5 +- .../console/Tests/Fixtures/input_option_2.md | 7 +- .../console/Tests/Fixtures/input_option_3.md | 7 +- .../console/Tests/Fixtures/input_option_4.md | 7 +- .../console/Tests/Fixtures/input_option_5.md | 9 +- .../console/Tests/Fixtures/input_option_5.txt | 2 +- .../console/Tests/Fixtures/input_option_6.md | 7 +- .../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 | 3 +- .../Formatter/OutputFormatterStyleTest.php | 7 +- .../Tests/Formatter/OutputFormatterTest.php | 73 +- .../Helper/AbstractQuestionHelperTest.php | 34 + .../Tests/Helper/FormatterHelperTest.php | 3 +- .../console/Tests/Helper/HelperSetTest.php | 5 +- .../console/Tests/Helper/HelperTest.php | 3 +- .../Tests/Helper/ProcessHelperTest.php | 21 +- .../console/Tests/Helper/ProgressBarTest.php | 196 +- .../Tests/Helper/ProgressIndicatorTest.php | 13 +- .../Tests/Helper/QuestionHelperTest.php | 639 +- .../Helper/SymfonyQuestionHelperTest.php | 61 +- .../console/Tests/Helper/TableStyleTest.php | 3 +- .../console/Tests/Helper/TableTest.php | 189 +- .../console/Tests/Input/ArgvInputTest.php | 46 +- .../console/Tests/Input/ArrayInputTest.php | 21 +- .../console/Tests/Input/InputArgumentTest.php | 10 +- .../Tests/Input/InputDefinitionTest.php | 3 +- .../console/Tests/Input/InputOptionTest.php | 10 +- .../symfony/console/Tests/Input/InputTest.php | 19 +- .../console/Tests/Input/StringInputTest.php | 3 +- .../Tests/Logger/ConsoleLoggerTest.php | 165 +- .../Tests/Output/ConsoleOutputTest.php | 19 +- .../console/Tests/Output/NullOutputTest.php | 51 +- .../console/Tests/Output/OutputTest.php | 3 +- .../console/Tests/Output/StreamOutputTest.php | 3 +- .../console/Tests/Style/SymfonyStyleTest.php | 77 +- .../symfony/console/Tests/TerminalTest.php | 44 + .../Tests/Tester/ApplicationTesterTest.php | 3 +- .../Tests/Tester/CommandTesterTest.php | 81 +- .../vendor/symfony/console/composer.json | 18 +- .../vendor/symfony/console/phpunit.xml.dist | 2 + .../vendor/symfony/debug/CHANGELOG.md | 17 + .../vendor/symfony/debug/DebugClassLoader.php | 205 +- .../vendor/symfony/debug/ErrorHandler.php | 250 +- .../debug/Exception/ContextErrorException.php | 4 + .../debug/Exception/FlattenException.php | 7 + .../debug/Exception/SilencedErrorContext.php | 67 + .../vendor/symfony/debug/ExceptionHandler.php | 187 +- .../ClassNotFoundFatalErrorHandler.php | 2 +- .../UndefinedMethodFatalErrorHandler.php | 8 +- lib/composer/vendor/symfony/debug/LICENSE | 2 +- .../debug/Resources/ext/tests/001.phpt | 28 +- .../debug/Resources/ext/tests/002.phpt | 5 +- .../debug/Resources/ext/tests/002_1.phpt | 5 +- .../debug/Resources/ext/tests/003.phpt | 4 +- .../debug/Tests/DebugClassLoaderTest.php | 130 +- .../symfony/debug/Tests/ErrorHandlerTest.php | 145 +- .../Tests/Exception/FlattenExceptionTest.php | 116 +- .../debug/Tests/ExceptionHandlerTest.php | 17 +- .../ClassNotFoundFatalErrorHandlerTest.php | 14 +- ...UndefinedFunctionFatalErrorHandlerTest.php | 3 +- .../UndefinedMethodFatalErrorHandlerTest.php | 12 +- .../debug/Tests/Fixtures/AnnotatedClass.php | 13 + .../debug/Tests/Fixtures/DeprecatedClass.php | 2 +- .../Tests/Fixtures/DeprecatedInterface.php | 2 +- .../Tests/Fixtures/ExtendedFinalMethod.php | 17 + .../debug/Tests/Fixtures/FinalClass.php | 10 + .../debug/Tests/Fixtures/FinalMethod.php | 17 + .../debug/Tests/Fixtures/InternalClass.php | 15 + .../Tests/Fixtures/InternalInterface.php | 10 + .../debug/Tests/Fixtures/InternalTrait.php | 10 + .../debug/Tests/Fixtures/InternalTrait2.php | 23 + .../symfony/debug/Tests/Fixtures/Throwing.php | 3 + .../debug/Tests/phpt/debug_class_loader.phpt | 26 + .../debug/Tests/phpt/exception_rethrown.phpt | 35 + .../phpt/fatal_with_nested_handlers.phpt | 42 + .../vendor/symfony/debug/composer.json | 7 +- .../vendor/symfony/debug/phpunit.xml.dist | 2 + .../symfony/event-dispatcher/CHANGELOG.md | 10 + .../ContainerAwareEventDispatcher.php | 36 +- .../Debug/TraceableEventDispatcher.php | 110 +- .../TraceableEventDispatcherInterface.php | 2 + .../Debug/WrappedListener.php | 43 + .../RegisterListenersPass.php | 98 +- .../event-dispatcher/EventDispatcher.php | 68 +- .../EventDispatcherInterface.php | 9 +- .../symfony/event-dispatcher/GenericEvent.php | 21 +- .../ImmutableEventDispatcher.php | 10 - .../vendor/symfony/event-dispatcher/LICENSE | 2 +- .../Tests/AbstractEventDispatcherTest.php | 71 +- .../ContainerAwareEventDispatcherTest.php | 19 +- .../Debug/TraceableEventDispatcherTest.php | 57 +- .../RegisterListenersPassTest.php | 83 +- .../event-dispatcher/Tests/EventTest.php | 3 +- .../Tests/GenericEventTest.php | 9 +- .../Tests/ImmutableEventDispatcherTest.php | 9 +- .../symfony/event-dispatcher/composer.json | 15 +- .../symfony/event-dispatcher/phpunit.xml.dist | 2 + .../vendor/symfony/filesystem/CHANGELOG.md | 15 + .../vendor/symfony/filesystem/Filesystem.php | 271 +- .../vendor/symfony/filesystem/LICENSE | 2 +- .../vendor/symfony/filesystem/LockHandler.php | 17 +- .../filesystem/Tests/ExceptionTest.php | 3 +- .../filesystem/Tests/FilesystemTest.php | 526 +- .../filesystem/Tests/FilesystemTestCase.php | 54 +- .../filesystem/Tests/LockHandlerTest.php | 46 +- .../vendor/symfony/filesystem/composer.json | 4 +- .../symfony/filesystem/phpunit.xml.dist | 2 + .../vendor/symfony/finder/CHANGELOG.md | 11 + .../finder/Comparator/DateComparator.php | 2 - .../finder/Comparator/NumberComparator.php | 4 +- .../finder/Exception/ExceptionInterface.php | 2 + lib/composer/vendor/symfony/finder/Finder.php | 79 +- lib/composer/vendor/symfony/finder/Glob.php | 28 +- .../finder/Iterator/CustomFilterIterator.php | 2 - .../Iterator/DateRangeFilterIterator.php | 4 +- .../Iterator/DepthRangeFilterIterator.php | 2 - .../ExcludeDirectoryFilterIterator.php | 2 - .../Iterator/FileTypeFilterIterator.php | 2 - .../finder/Iterator/FilterIterator.php | 4 +- .../Iterator/MultiplePcreFilterIterator.php | 2 - .../Iterator/RecursiveDirectoryIterator.php | 4 +- .../Iterator/SizeRangeFilterIterator.php | 2 - .../finder/Iterator/SortableIterator.php | 6 +- lib/composer/vendor/symfony/finder/LICENSE | 2 +- .../vendor/symfony/finder/SplFileInfo.php | 2 - .../Tests/Comparator/ComparatorTest.php | 3 +- .../Tests/Comparator/DateComparatorTest.php | 3 +- .../Tests/Comparator/NumberComparatorTest.php | 3 +- .../symfony/finder/Tests/FinderTest.php | 20 +- .../symfony/finder/Tests/Fixtures/.dot/a | 0 .../finder/Tests/Fixtures/.dot/b/c.neon | 0 .../finder/Tests/Fixtures/.dot/b/d.neon | 0 .../symfony/finder/Tests/Fixtures/one/.dot | 1 + .../vendor/symfony/finder/Tests/GlobTest.php | 72 +- .../Tests/Iterator/FilterIteratorTest.php | 2 + .../Tests/Iterator/IteratorTestCase.php | 4 +- .../finder/Tests/Iterator/MockSplFileInfo.php | 6 +- .../MultiplePcreFilterIteratorTest.php | 3 +- .../Tests/Iterator/PathFilterIteratorTest.php | 1 - .../Tests/Iterator/SortableIteratorTest.php | 12 +- .../vendor/symfony/finder/composer.json | 4 +- .../vendor/symfony/finder/phpunit.xml.dist | 2 + .../symfony/polyfill-mbstring/Mbstring.php | 22 +- .../symfony/polyfill-mbstring/composer.json | 2 +- .../vendor/symfony/process/CHANGELOG.md | 17 + .../Exception/ProcessTimedOutException.php | 4 +- .../symfony/process/ExecutableFinder.php | 4 +- lib/composer/vendor/symfony/process/LICENSE | 2 +- .../vendor/symfony/process/PhpProcess.php | 22 +- .../symfony/process/Pipes/AbstractPipes.php | 9 +- .../symfony/process/Pipes/UnixPipes.php | 5 +- .../symfony/process/Pipes/WindowsPipes.php | 4 - .../vendor/symfony/process/Process.php | 307 +- .../vendor/symfony/process/ProcessBuilder.php | 50 +- .../vendor/symfony/process/ProcessUtils.php | 6 +- .../process/Tests/ExecutableFinderTest.php | 3 +- .../process/Tests/PhpExecutableFinderTest.php | 3 +- .../symfony/process/Tests/PhpProcessTest.php | 11 +- .../process/Tests/ProcessBuilderTest.php | 61 +- .../Tests/ProcessFailedExceptionTest.php | 31 +- .../symfony/process/Tests/ProcessTest.php | 342 +- .../process/Tests/ProcessUtilsTest.php | 7 +- .../symfony/process/Tests/SignalListener.php | 2 +- .../vendor/symfony/process/composer.json | 4 +- .../vendor/symfony/process/phpunit.xml.dist | 2 + lib/composer/vendor/symfony/yaml/CHANGELOG.md | 82 + .../symfony/yaml/Command/LintCommand.php | 248 + lib/composer/vendor/symfony/yaml/Dumper.php | 33 +- lib/composer/vendor/symfony/yaml/Escaper.php | 10 +- .../symfony/yaml/Exception/ParseException.php | 12 +- lib/composer/vendor/symfony/yaml/Inline.php | 418 +- lib/composer/vendor/symfony/yaml/LICENSE | 2 +- lib/composer/vendor/symfony/yaml/Parser.php | 626 +- .../vendor/symfony/yaml/Tag/TaggedValue.php | 48 + .../yaml/Tests/Command/LintCommandTest.php | 139 + .../vendor/symfony/yaml/Tests/DumperTest.php | 150 +- .../Fixtures/YtsSpecificationExamples.yml | 74 +- .../yaml/Tests/Fixtures/YtsTypeTransfers.yml | 56 +- .../Tests/Fixtures/booleanMappingKeys.yml | 11 + .../Fixtures/legacyBooleanMappingKeys.yml | 23 + .../Tests/Fixtures/legacyNonStringKeys.yml | 2 + .../Tests/Fixtures/legacyNullMappingKey.yml | 9 + .../multiple_lines_as_literal_block.yml | 3 +- .../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/sfMergeKey.yml | 23 +- .../symfony/yaml/Tests/Fixtures/sfTests.yml | 9 - .../vendor/symfony/yaml/Tests/InlineTest.php | 263 +- .../symfony/yaml/Tests/ParseExceptionTest.php | 3 +- .../vendor/symfony/yaml/Tests/ParserTest.php | 974 +- .../vendor/symfony/yaml/Tests/YamlTest.php | 3 +- lib/composer/vendor/symfony/yaml/Yaml.php | 43 +- .../vendor/symfony/yaml/composer.json | 13 +- .../vendor/symfony/yaml/phpunit.xml.dist | 2 + .../vendor/theseer/tokenizer/.gitignore | 7 + lib/composer/vendor/theseer/tokenizer/.php_cs | 67 + .../vendor/theseer/tokenizer/.travis.yml | 33 + lib/composer/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 + .../theseer/tokenizer/src/Exception.php | 6 + .../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 + .../theseer/tokenizer/src/Tokenizer.php | 82 + .../theseer/tokenizer/src/XMLSerializer.php | 94 + .../tokenizer/tests/NamespaceUriTest.php | 29 + .../tokenizer/tests/TokenCollectionTest.php | 72 + .../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 + .../victorjonsson/markdowndocs/.travis.yml | 9 - .../victorjonsson/markdowndocs/README.md | 96 - .../victorjonsson/markdowndocs/bin/phpdoc-md | 17 - .../victorjonsson/markdowndocs/composer.json | 23 - .../vendor/victorjonsson/markdowndocs/docs.md | 251 - .../victorjonsson/markdowndocs/phpdoc-md | 17 - .../victorjonsson/markdowndocs/phpunit.xml | 7 - .../src/PHPDocsMD/ClassEntity.php | 202 - .../src/PHPDocsMD/ClassEntityFactory.php | 40 - .../markdowndocs/src/PHPDocsMD/CodeEntity.php | 113 - .../src/PHPDocsMD/Console/CLI.php | 31 - .../PHPDocsMD/Console/PHPDocsMDCommand.php | 288 - .../markdowndocs/src/PHPDocsMD/DocInfo.php | 99 - .../src/PHPDocsMD/DocInfoExtractor.php | 174 - .../src/PHPDocsMD/FunctionEntity.php | 154 - .../src/PHPDocsMD/FunctionFinder.php | 66 - .../src/PHPDocsMD/MDTableGenerator.php | 204 - .../src/PHPDocsMD/ParamEntity.php | 66 - .../markdowndocs/src/PHPDocsMD/Reflector.php | 417 - .../src/PHPDocsMD/ReflectorInterface.php | 16 - .../src/PHPDocsMD/UseInspector.php | 50 - .../markdowndocs/src/PHPDocsMD/Utils.php | 96 - .../markdowndocs/test/ExampleClass.php | 157 - .../test/MDTableGeneratorTest.php | 123 - .../markdowndocs/test/ReflectorTest.php | 160 - .../markdowndocs/test/UseInspectorTest.php | 42 - .../vendor/webmozart/assert/.styleci.yml | 1 + .../vendor/webmozart/assert/.travis.yml | 4 + .../vendor/webmozart/assert/CHANGELOG.md | 6 + .../vendor/webmozart/assert/README.md | 15 +- .../vendor/webmozart/assert/appveyor.yml | 4 + .../vendor/webmozart/assert/composer.json | 4 +- .../vendor/webmozart/assert/src/Assert.php | 335 +- .../webmozart/assert/tests/AssertTest.php | 47 +- server.includes.inc.php | 1 - src/Classes/Email/PHPMailer.php | 1 - src/Classes/Email/SwiftMailer.php | 93 +- test/TestTemplate.php | 4 + tools/phpunit | 42987 +++++++--------- 2349 files changed, 117270 insertions(+), 83170 deletions(-) create mode 120000 lib/composer/vendor/bin/export-plural-rules create mode 120000 lib/composer/vendor/bin/export-plural-rules.php delete mode 100755 lib/composer/vendor/bin/phpdoc-md mode change 100755 => 120000 lib/composer/vendor/bin/phpunit mode change 100755 => 120000 lib/composer/vendor/bin/robo create mode 100644 lib/composer/vendor/composer/include_paths.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/appveyor.yml create mode 100644 lib/composer/vendor/consolidation/annotated-command/infection.json.dist create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Cache/CacheWrapper.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Cache/NullCache.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Cache/SimpleCacheInterface.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/CommandCreationListener.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Events/CustomEventAwareInterface.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Events/CustomEventAwareTrait.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Help/HelpCommand.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocument.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocumentAlter.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/CommandEventHookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ExtracterHookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/HookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InteractHookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/OptionsHookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ProcessResultHookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ReplaceCommandHookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/StatusDeterminerHookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoSerializer.php delete mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/AbstractCommandDocBlockParser.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/BespokeDocBlockParser.php delete mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser2.php delete mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser3.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CsvUtils.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/DocblockTag.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/FullyQualifiedClassCache.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/TagFactory.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/tests/FullyQualifiedClassCacheTests.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/tests/src/InMemoryCacheStore.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/tests/src/TestTerminal.php create mode 100644 lib/composer/vendor/consolidation/annotated-command/tests/testHelp.php create mode 100644 lib/composer/vendor/consolidation/config/.editorconfig create mode 100644 lib/composer/vendor/consolidation/config/.gitignore create mode 100644 lib/composer/vendor/consolidation/config/.travis.yml create mode 100644 lib/composer/vendor/consolidation/config/CHANGELOG.md create mode 100644 lib/composer/vendor/consolidation/config/CONTRIBUTING.md create mode 100644 lib/composer/vendor/consolidation/config/LICENSE create mode 100644 lib/composer/vendor/consolidation/config/README.md create mode 100644 lib/composer/vendor/consolidation/config/composer.json create mode 100644 lib/composer/vendor/consolidation/config/composer.lock create mode 100644 lib/composer/vendor/consolidation/config/phpunit.xml.dist create mode 100755 lib/composer/vendor/consolidation/config/scenarios/install rename lib/composer/vendor/{phpdocumentor/type-resolver => consolidation/config/scenarios/symfony2}/.gitignore (77%) create mode 100644 lib/composer/vendor/consolidation/config/scenarios/symfony2/composer.json create mode 120000 lib/composer/vendor/consolidation/config/scenarios/symfony2/src create mode 120000 lib/composer/vendor/consolidation/config/scenarios/symfony2/tests rename lib/composer/vendor/{phpdocumentor/reflection-docblock => consolidation/config/scenarios/symfony4}/.gitignore (53%) create mode 100644 lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.json create mode 100644 lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.lock create mode 120000 lib/composer/vendor/consolidation/config/scenarios/symfony4/src create mode 120000 lib/composer/vendor/consolidation/config/scenarios/symfony4/tests create mode 100644 lib/composer/vendor/consolidation/config/src/Config.php create mode 100644 lib/composer/vendor/consolidation/config/src/ConfigInterface.php create mode 100644 lib/composer/vendor/consolidation/config/src/GlobalOptionDefaultValuesInterface.php create mode 100644 lib/composer/vendor/consolidation/config/src/Inject/ConfigForCommand.php create mode 100644 lib/composer/vendor/consolidation/config/src/Inject/ConfigForSetters.php create mode 100644 lib/composer/vendor/consolidation/config/src/Loader/ConfigLoader.php create mode 100644 lib/composer/vendor/consolidation/config/src/Loader/ConfigLoaderInterface.php create mode 100644 lib/composer/vendor/consolidation/config/src/Loader/ConfigProcessor.php create mode 100644 lib/composer/vendor/consolidation/config/src/Loader/YamlConfigLoader.php create mode 100644 lib/composer/vendor/consolidation/config/src/Util/ArrayUtil.php create mode 100644 lib/composer/vendor/consolidation/config/src/Util/ConfigFallback.php create mode 100644 lib/composer/vendor/consolidation/config/src/Util/ConfigGroup.php create mode 100644 lib/composer/vendor/consolidation/config/src/Util/ConfigMerge.php create mode 100644 lib/composer/vendor/consolidation/config/src/Util/ConfigOverlay.php create mode 100644 lib/composer/vendor/consolidation/config/src/Util/EnvConfig.php create mode 100644 lib/composer/vendor/consolidation/config/tests/ConfigForCommandTest.php create mode 100644 lib/composer/vendor/consolidation/config/tests/ConfigForSettersTest.php create mode 100644 lib/composer/vendor/consolidation/config/tests/ConfigGroupTest.php create mode 100644 lib/composer/vendor/consolidation/config/tests/ConfigLoaderTest.php create mode 100644 lib/composer/vendor/consolidation/config/tests/ConfigOverlayTest.php create mode 100644 lib/composer/vendor/consolidation/config/tests/ConfigProcessorTest.php create mode 100644 lib/composer/vendor/consolidation/config/tests/ConfigTest.php create mode 100644 lib/composer/vendor/consolidation/config/tests/data/config-1.yml create mode 100644 lib/composer/vendor/consolidation/config/tests/data/config-2.yml create mode 100644 lib/composer/vendor/consolidation/config/tests/data/config-3.yml create mode 100755 lib/composer/vendor/consolidation/config/tests/scripts/install-scenario create mode 100755 lib/composer/vendor/consolidation/config/tests/scripts/prep-dependencies create mode 100755 lib/composer/vendor/consolidation/config/tests/scripts/scenarios create mode 100644 lib/composer/vendor/consolidation/config/tests/src/ApplyConfigTestTarget.php create mode 100644 lib/composer/vendor/consolidation/config/tests/src/MyFooCommand.php create mode 100644 lib/composer/vendor/consolidation/config/tests/src/TestLoader.php create mode 100644 lib/composer/vendor/consolidation/log/.editorconfig create mode 100644 lib/composer/vendor/consolidation/log/.travis.yml create mode 100644 lib/composer/vendor/consolidation/log/CONTRIBUTING.md delete mode 100644 lib/composer/vendor/consolidation/log/circle.yml create mode 100644 lib/composer/vendor/consolidation/log/composer.lock create mode 100644 lib/composer/vendor/consolidation/output-formatters/appveyor.yml create mode 100644 lib/composer/vendor/consolidation/output-formatters/composer.lock create mode 100644 lib/composer/vendor/consolidation/output-formatters/composer.windows.lock create mode 100644 lib/composer/vendor/consolidation/output-formatters/src/StructuredData/HelpDocument.php create mode 100644 lib/composer/vendor/consolidation/output-formatters/src/StructuredData/ListDataFromKeys.php create mode 100644 lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/CalculateWidths.php create mode 100644 lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/ColumnWidths.php create mode 100644 lib/composer/vendor/consolidation/output-formatters/test.php delete mode 100644 lib/composer/vendor/consolidation/robo/.github/issue_template.md delete mode 100644 lib/composer/vendor/consolidation/robo/.github/pull_request_template.md delete mode 100644 lib/composer/vendor/consolidation/robo/.gitignore delete mode 100644 lib/composer/vendor/consolidation/robo/.scrutinizer.yml delete mode 100644 lib/composer/vendor/consolidation/robo/.travis.yml delete mode 100644 lib/composer/vendor/consolidation/robo/docs/collections.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/extending.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/framework.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/getting-started.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/index.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/ApiGen.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Archive.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Assets.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Base.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Bower.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Composer.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Development.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Docker.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/File.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Filesystem.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Gulp.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Npm.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Remote.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Testing.md delete mode 100644 lib/composer/vendor/consolidation/robo/docs/tasks/Vcs.md delete mode 100644 lib/composer/vendor/consolidation/robo/examples/RoboFile.php delete mode 100755 lib/composer/vendor/consolidation/robo/examples/robo.script create mode 100644 lib/composer/vendor/consolidation/robo/robo.yml create mode 100755 lib/composer/vendor/consolidation/robo/scenarios/install create mode 100644 lib/composer/vendor/consolidation/robo/scenarios/symfony2/.gitignore create mode 100644 lib/composer/vendor/consolidation/robo/scenarios/symfony2/composer.json create mode 120000 lib/composer/vendor/consolidation/robo/scenarios/symfony2/src create mode 100644 lib/composer/vendor/consolidation/robo/scenarios/symfony2/tests/.gitkeep create mode 100644 lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitignore create mode 100644 lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitkeep create mode 100644 lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.json create mode 100644 lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.lock create mode 120000 lib/composer/vendor/consolidation/robo/scenarios/symfony4/src create mode 100644 lib/composer/vendor/consolidation/robo/src/Common/ExecTrait.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Common/OutputAdapter.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Common/ProcessExecutor.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Common/ProcessUtils.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Config/Config.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Contract/OutputAdapterInterface.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Contract/VerbosityThresholdInterface.php create mode 100644 lib/composer/vendor/consolidation/robo/src/SelfUpdateCommand.php create mode 100644 lib/composer/vendor/consolidation/robo/src/State/Consumer.php create mode 100644 lib/composer/vendor/consolidation/robo/src/State/Data.php create mode 100644 lib/composer/vendor/consolidation/robo/src/State/StateAwareInterface.php create mode 100644 lib/composer/vendor/consolidation/robo/src/State/StateAwareTrait.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Task/Composer/Config.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Task/Composer/CreateProject.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Task/Composer/Init.php create mode 100644 lib/composer/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_bootstrap.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboFile.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboTask.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/claypit/a.txt delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/claypit/b.txt delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/claypit/box/robo.txt delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/existing_file delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/nested/structu.re delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/claypit/some_destination/deeply/existing_file delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/dump.sql delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/parascript.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_data/sample.css delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_helpers/CliGuy.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_helpers/CliHelper.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_helpers/CodeGuy.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_helpers/CodeHelper.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_helpers/SeeInOutputTrait.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_helpers/TestHelper.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/_helpers/WebHelper.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli.suite.yml delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/AssetsCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/CleanDirCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/CollectionCest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/ConcatCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/CopyDirCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/CopyDirOverwritesFilesCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/CopyDirRecursiveCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/DeleteDirCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/ExecCest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/FilesystemStackCest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirParentsCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/GenTaskCest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/GenerateMarkdownDocCest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/PackExtractCept.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/ShortcutsCest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/SimulatedCest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/WriteFileCest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/cli/_bootstrap.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/src/RoboFileFixture.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/src/Traits/Common/CommandArgumentsHost.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit.suite.yml delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/ApplicationTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Common/CommandArgumentsTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Common/ResourceExistenceChecker.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/ConfigurationTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/OutputTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/ResultTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/RunnerTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/ApiGenTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/AtoumTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/BehatTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/BowerTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/CodeceptionTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/CollectionTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/CommandStackTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/ComposerTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/DockerTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/ExecTaskTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/GitTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/GulpTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/HgTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/NpmTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPServerTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPUnitTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/ParallelExecTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/PhpspecTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/RsyncTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/SemVerTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/SshTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/Task/SvnTest.php delete mode 100644 lib/composer/vendor/consolidation/robo/tests/unit/_bootstrap.php create mode 100644 lib/composer/vendor/dflydev/dot-access-data/.gitignore create mode 100644 lib/composer/vendor/dflydev/dot-access-data/.travis.yml create mode 100644 lib/composer/vendor/dflydev/dot-access-data/LICENSE create mode 100644 lib/composer/vendor/dflydev/dot-access-data/README.md create mode 100644 lib/composer/vendor/dflydev/dot-access-data/composer.json create mode 100644 lib/composer/vendor/dflydev/dot-access-data/phpunit.xml.dist create mode 100644 lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/Data.php create mode 100644 lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/DataInterface.php create mode 100644 lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/Util.php create mode 100644 lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/DataTest.php create mode 100644 lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/UtilTest.php create mode 100644 lib/composer/vendor/dflydev/dot-access-data/tests/bootstrap.php create mode 100644 lib/composer/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js create mode 100755 lib/composer/vendor/gettext/languages/bin/export-plural-rules create mode 100644 lib/composer/vendor/gettext/languages/bin/export-plural-rules.bat rename lib/composer/vendor/gettext/languages/bin/{export.php => export-plural-rules.php} (100%) mode change 100644 => 100755 delete mode 100644 lib/composer/vendor/gettext/languages/bin/export.cmd delete mode 100755 lib/composer/vendor/gettext/languages/bin/export.sh create mode 100644 lib/composer/vendor/grasmash/expander/.gitignore create mode 100644 lib/composer/vendor/grasmash/expander/.travis.yml create mode 100644 lib/composer/vendor/grasmash/expander/CONTRIBUTING.md create mode 100644 lib/composer/vendor/grasmash/expander/LICENSE.md create mode 100644 lib/composer/vendor/grasmash/expander/README.md create mode 100644 lib/composer/vendor/grasmash/expander/RELEASE.md create mode 100644 lib/composer/vendor/grasmash/expander/composer.json create mode 100644 lib/composer/vendor/grasmash/expander/composer.lock create mode 100644 lib/composer/vendor/grasmash/expander/phpunit.xml.dist create mode 100644 lib/composer/vendor/grasmash/expander/src/Expander.php create mode 100644 lib/composer/vendor/grasmash/expander/src/Stringifier.php create mode 100644 lib/composer/vendor/grasmash/expander/src/StringifierInterface.php create mode 100644 lib/composer/vendor/grasmash/expander/tests/phpunit/ExpanderTest.php create mode 100644 lib/composer/vendor/grasmash/yaml-expander/.gitignore create mode 100644 lib/composer/vendor/grasmash/yaml-expander/.travis.yml create mode 100644 lib/composer/vendor/grasmash/yaml-expander/CONTRIBUTING.md create mode 100644 lib/composer/vendor/grasmash/yaml-expander/LICENSE.md create mode 100644 lib/composer/vendor/grasmash/yaml-expander/README.md create mode 100644 lib/composer/vendor/grasmash/yaml-expander/RELEASE.md create mode 100644 lib/composer/vendor/grasmash/yaml-expander/composer.json create mode 100644 lib/composer/vendor/grasmash/yaml-expander/composer.lock create mode 100644 lib/composer/vendor/grasmash/yaml-expander/phpunit.xml.dist create mode 100755 lib/composer/vendor/grasmash/yaml-expander/scenarios/install create mode 100644 lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/.gitignore create mode 100644 lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/composer.json create mode 120000 lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/src create mode 120000 lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/tests create mode 100644 lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/.gitignore create mode 100644 lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.json create mode 100644 lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.lock create mode 120000 lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/src create mode 120000 lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/tests create mode 100644 lib/composer/vendor/grasmash/yaml-expander/src/Expander.php create mode 100644 lib/composer/vendor/grasmash/yaml-expander/tests/phpunit/ExpanderTest.php create mode 100644 lib/composer/vendor/grasmash/yaml-expander/tests/resources/valid.yml create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f001/A.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f001/B.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f002/A.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f003/Foo.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f005/Foo.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f006/A.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f006/B.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f008/A.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/fixtures/f008/B.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php create mode 100644 lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php create mode 100644 lib/composer/vendor/pear/console_getopt/.gitignore create mode 100644 lib/composer/vendor/pear/console_getopt/.travis.yml create mode 100644 lib/composer/vendor/pear/console_getopt/Console/Getopt.php create mode 100644 lib/composer/vendor/pear/console_getopt/LICENSE create mode 100644 lib/composer/vendor/pear/console_getopt/README.rst create mode 100644 lib/composer/vendor/pear/console_getopt/composer.json create mode 100644 lib/composer/vendor/pear/console_getopt/package.xml create mode 100644 lib/composer/vendor/pear/console_getopt/tests/001-getopt.phpt create mode 100644 lib/composer/vendor/pear/console_getopt/tests/bug10557.phpt create mode 100644 lib/composer/vendor/pear/console_getopt/tests/bug11068.phpt create mode 100644 lib/composer/vendor/pear/console_getopt/tests/bug13140.phpt create mode 100644 lib/composer/vendor/pear/mail/.gitignore create mode 100644 lib/composer/vendor/pear/mail/.travis.yml create mode 100644 lib/composer/vendor/pear/mail/LICENSE create mode 100644 lib/composer/vendor/pear/mail/Mail.php rename lib/{ => composer/vendor/pear/mail}/Mail/RFC822.php (91%) rename lib/{ => composer/vendor/pear/mail}/Mail/mail.php (84%) rename lib/{ => composer/vendor/pear/mail}/Mail/mock.php (77%) rename lib/{ => composer/vendor/pear/mail}/Mail/null.php (71%) rename lib/{ => composer/vendor/pear/mail}/Mail/sendmail.php (71%) rename lib/{ => composer/vendor/pear/mail}/Mail/smtp.php (84%) rename lib/{ => composer/vendor/pear/mail}/Mail/smtpmx.php (93%) create mode 100644 lib/composer/vendor/pear/mail/README.rst create mode 100644 lib/composer/vendor/pear/mail/composer.json create mode 100644 lib/composer/vendor/pear/mail/package.xml create mode 100644 lib/composer/vendor/pear/mail/tests/13659.phpt create mode 100644 lib/composer/vendor/pear/mail/tests/9137.phpt create mode 100644 lib/composer/vendor/pear/mail/tests/9137_2.phpt create mode 100644 lib/composer/vendor/pear/mail/tests/Makefile create mode 100755 lib/composer/vendor/pear/mail/tests/bug17178.phpt create mode 100755 lib/composer/vendor/pear/mail/tests/bug17317.phpt create mode 100644 lib/composer/vendor/pear/mail/tests/rfc822.phpt create mode 100644 lib/composer/vendor/pear/mail/tests/smtp_error.phpt create mode 100644 lib/composer/vendor/pear/mail/tests/validateQuotedString.php create mode 100644 lib/composer/vendor/pear/net_smtp/.gitignore create mode 100644 lib/composer/vendor/pear/net_smtp/.travis.yml create mode 100644 lib/composer/vendor/pear/net_smtp/LICENSE create mode 100644 lib/composer/vendor/pear/net_smtp/Net/SMTP.php create mode 120000 lib/composer/vendor/pear/net_smtp/README.rst create mode 100644 lib/composer/vendor/pear/net_smtp/composer.json create mode 100644 lib/composer/vendor/pear/net_smtp/docs/docutils.conf create mode 100644 lib/composer/vendor/pear/net_smtp/docs/docutils.css create mode 100644 lib/composer/vendor/pear/net_smtp/docs/guide.txt create mode 100644 lib/composer/vendor/pear/net_smtp/examples/basic.php create mode 100644 lib/composer/vendor/pear/net_smtp/package.xml create mode 100755 lib/composer/vendor/pear/net_smtp/phpdoc.sh create mode 100644 lib/composer/vendor/pear/net_smtp/tests/auth.phpt create mode 100644 lib/composer/vendor/pear/net_smtp/tests/basic.phpt create mode 100644 lib/composer/vendor/pear/net_smtp/tests/config.php.dist create mode 100644 lib/composer/vendor/pear/net_smtp/tests/quotedata.phpt create mode 100644 lib/composer/vendor/pear/net_socket/.gitignore create mode 100644 lib/composer/vendor/pear/net_socket/.travis.yml create mode 100644 lib/composer/vendor/pear/net_socket/LICENSE create mode 100644 lib/composer/vendor/pear/net_socket/Net/Socket.php create mode 100644 lib/composer/vendor/pear/net_socket/README.md create mode 100644 lib/composer/vendor/pear/net_socket/composer.json create mode 100644 lib/composer/vendor/pear/net_socket/package.xml create mode 100644 lib/composer/vendor/pear/net_socket/phpunit.xml.dist create mode 100644 lib/composer/vendor/pear/pear-core-minimal/README.rst create mode 100644 lib/composer/vendor/pear/pear-core-minimal/composer.json create mode 100644 lib/composer/vendor/pear/pear-core-minimal/src/OS/Guess.php create mode 100644 lib/composer/vendor/pear/pear-core-minimal/src/PEAR.php create mode 100644 lib/composer/vendor/pear/pear-core-minimal/src/PEAR/Error.php create mode 100644 lib/composer/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php create mode 100644 lib/composer/vendor/pear/pear-core-minimal/src/System.php create mode 100644 lib/composer/vendor/pear/pear_exception/.gitignore create mode 100644 lib/composer/vendor/pear/pear_exception/.travis.yml create mode 100644 lib/composer/vendor/pear/pear_exception/LICENSE create mode 100644 lib/composer/vendor/pear/pear_exception/PEAR/Exception.php create mode 100644 lib/composer/vendor/pear/pear_exception/composer.json create mode 100644 lib/composer/vendor/pear/pear_exception/package.xml create mode 100644 lib/composer/vendor/pear/pear_exception/tests/PEAR/ExceptionTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/.gitignore create mode 100644 lib/composer/vendor/phar-io/manifest/.php_cs create mode 100644 lib/composer/vendor/phar-io/manifest/.travis.yml create mode 100644 lib/composer/vendor/phar-io/manifest/LICENSE create mode 100644 lib/composer/vendor/phar-io/manifest/README.md create mode 100644 lib/composer/vendor/phar-io/manifest/build.xml create mode 100644 lib/composer/vendor/phar-io/manifest/composer.json create mode 100644 lib/composer/vendor/phar-io/manifest/examples/example-01.php create mode 100644 lib/composer/vendor/phar-io/manifest/phive.xml create mode 100644 lib/composer/vendor/phar-io/manifest/phpunit.xml create mode 100644 lib/composer/vendor/phar-io/manifest/src/ManifestDocumentMapper.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/ManifestLoader.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/ManifestSerializer.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/exceptions/Exception.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestElementException.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/Application.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/ApplicationName.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/Author.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/AuthorCollection.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/BundledComponent.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollection.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/CopyrightInformation.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/Email.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/Extension.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/Library.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/License.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/Manifest.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/Requirement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/RequirementCollection.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/Type.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/values/Url.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/AuthorElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/BundlesElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ComponentElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ContainsElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/CopyrightElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ElementCollection.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ExtElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ExtElementCollection.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ExtensionElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/LicenseElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocument.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/ManifestElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/PhpElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/src/xml/RequiresElement.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/ManifestDocumentMapperTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/ManifestLoaderTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/ManifestSerializerTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/_fixture/custom.xml create mode 100644 lib/composer/vendor/phar-io/manifest/tests/_fixture/extension-invalidcompatible.xml create mode 100644 lib/composer/vendor/phar-io/manifest/tests/_fixture/extension.xml create mode 100644 lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversion.xml create mode 100644 lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversionconstraint.xml create mode 100644 lib/composer/vendor/phar-io/manifest/tests/_fixture/library.xml create mode 100644 lib/composer/vendor/phar-io/manifest/tests/_fixture/manifest.xml create mode 100644 lib/composer/vendor/phar-io/manifest/tests/_fixture/phpunit-5.6.5.xml create mode 100644 lib/composer/vendor/phar-io/manifest/tests/_fixture/test.phar create mode 100644 lib/composer/vendor/phar-io/manifest/tests/exceptions/ManifestDocumentLoadingExceptionTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/ApplicationNameTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/ApplicationTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/AuthorCollectionTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/AuthorTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentCollectionTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/CopyrightInformationTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/EmailTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/ExtensionTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/LibraryTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/LicenseTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/ManifestTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/PhpExtensionRequirementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/PhpVersionRequirementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/RequirementCollectionTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/values/UrlTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementCollectionTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/BundlesElementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementCollectionTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/ContainsElementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/CopyrightElementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementCollectionTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/ExtensionElementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/LicenseElementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/ManifestDocumentTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/PhpElementTest.php create mode 100644 lib/composer/vendor/phar-io/manifest/tests/xml/RequiresElementTest.php create mode 100644 lib/composer/vendor/phar-io/version/.gitignore create mode 100644 lib/composer/vendor/phar-io/version/.php_cs create mode 100644 lib/composer/vendor/phar-io/version/.travis.yml create mode 100644 lib/composer/vendor/phar-io/version/LICENSE create mode 100644 lib/composer/vendor/phar-io/version/README.md create mode 100644 lib/composer/vendor/phar-io/version/build.xml create mode 100644 lib/composer/vendor/phar-io/version/composer.json create mode 100644 lib/composer/vendor/phar-io/version/phive.xml create mode 100644 lib/composer/vendor/phar-io/version/phpunit.xml create mode 100644 lib/composer/vendor/phar-io/version/src/AbstractVersionConstraint.php create mode 100644 lib/composer/vendor/phar-io/version/src/AndVersionConstraintGroup.php create mode 100644 lib/composer/vendor/phar-io/version/src/AnyVersionConstraint.php create mode 100644 lib/composer/vendor/phar-io/version/src/ExactVersionConstraint.php create mode 100644 lib/composer/vendor/phar-io/version/src/Exception.php create mode 100644 lib/composer/vendor/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php create mode 100644 lib/composer/vendor/phar-io/version/src/InvalidVersionException.php create mode 100644 lib/composer/vendor/phar-io/version/src/OrVersionConstraintGroup.php create mode 100644 lib/composer/vendor/phar-io/version/src/PreReleaseSuffix.php create mode 100644 lib/composer/vendor/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php create mode 100644 lib/composer/vendor/phar-io/version/src/SpecificMajorVersionConstraint.php create mode 100644 lib/composer/vendor/phar-io/version/src/UnsupportedVersionConstraintException.php create mode 100644 lib/composer/vendor/phar-io/version/src/Version.php create mode 100644 lib/composer/vendor/phar-io/version/src/VersionConstraint.php create mode 100644 lib/composer/vendor/phar-io/version/src/VersionConstraintParser.php create mode 100644 lib/composer/vendor/phar-io/version/src/VersionConstraintValue.php create mode 100644 lib/composer/vendor/phar-io/version/src/VersionNumber.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Integration/VersionConstraintParserTest.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Unit/AbstractVersionConstraintTest.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Unit/AndVersionConstraintGroupTest.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Unit/AnyVersionConstraintTest.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Unit/ExactVersionConstraintTest.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Unit/GreaterThanOrEqualToVersionConstraintTest.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Unit/OrVersionConstraintGroupTest.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorAndMinorVersionConstraintTest.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorVersionConstraintTest.php create mode 100644 lib/composer/vendor/phar-io/version/tests/Unit/VersionTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-common/.gitignore rename lib/composer/vendor/phpdocumentor/{type-resolver => reflection-common}/.travis.yml (98%) delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-common/composer.lock delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-common/phpunit.xml.dist delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-common/tests/common/bootstrap.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-common/tests/unit/FqsenTest.php create mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/.coveralls.yml delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/.scrutinizer.yml delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/.travis.yml delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/composer.lock create mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/easy-coding-standard.neon delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist create mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php create mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php create mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php create mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/InterpretingDocBlocksTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/ReconstitutingADocBlockTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/UsingTagsTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionFactoryTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/SerializerTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/StandardTagFactoryTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/AuthorTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/CoversTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/DeprecatedTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/Formatter/PassthroughFormatterTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/GenericTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/LinkTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/MethodTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ParamTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyReadTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyWriteTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ReturnTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SeeTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SinceTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SourceTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ThrowsTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/UsesTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VarTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VersionTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockFactoryTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/.scrutinizer.yml delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/examples/Classy.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/phpmd.xml.dist delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/phpunit.xml.dist create mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php rename lib/composer/vendor/phpdocumentor/type-resolver/src/Types/{Mixed.php => Mixed_.php} (95%) create mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Nullable.php create mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php rename lib/composer/vendor/phpdocumentor/type-resolver/src/Types/{Resource.php => Resource_.php} (94%) delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/TypeResolverTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextFactoryTest.php delete mode 100644 lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextTest.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/.travis.yml delete mode 100644 lib/composer/vendor/phpspec/prophecy/CONTRIBUTING.md delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValueTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValuesTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayCountTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEntryTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEveryEntryTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/CallbackTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/IdenticalValueTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalAndTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalNotTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/StringContainsTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/TypeTokenSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallCenterSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ClosureComparatorSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/FactorySpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/DisableConstructorPatchSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/HhvmExceptionPatchSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ProphecySubjectPatchSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatchSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/TraversablePatchSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/DoublerSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCreatorSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/LazyDoubleSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/NameGeneratorSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Call/UnexpectedCallExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassCreatorExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassMirrorExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassNotFoundExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/DoubleExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/InterfaceNotFoundExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/AggregateExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/NoCallsExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsCountExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/MethodProphecyExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/ObjectProphecyExceptionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallPredictionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallTimesPredictionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallbackPredictionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/NoCallsPredictionSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/CallbackPromiseSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnPromiseSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ThrowPromiseSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/RevealerSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ProphetSpec.php delete mode 100644 lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php rename lib/composer/vendor/phpunit/php-code-coverage/{ => .github}/CONTRIBUTING.md (100%) create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/.github/ISSUE_TEMPLATE.md create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.0.md create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.1.md create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.2.md create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.3.md create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/phpunit.xml create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.js create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/src/Report/Xml/Source.php create mode 100644 lib/composer/vendor/phpunit/php-code-coverage/src/Version.php create mode 100644 lib/composer/vendor/phpunit/php-timer/phpunit.xml create mode 100644 lib/composer/vendor/phpunit/php-token-stream/ChangeLog.md delete mode 100644 lib/composer/vendor/phpunit/php-token-stream/build/phpunit.xml rename lib/composer/vendor/phpunit/{php-code-coverage/build => php-token-stream}/phpunit.xml (56%) create mode 100644 lib/composer/vendor/phpunit/php-token-stream/tests/_fixture/class_with_method_named_empty.php create mode 100644 lib/composer/vendor/phpunit/php-token-stream/tests/_fixture/class_with_multiple_anonymous_classes_and_functions.php create mode 100644 lib/composer/vendor/phpunit/php-token-stream/tests/_fixture/php-code-coverage-issue-424.php create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/.github/ISSUE_TEMPLATE.md delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/build/travis-ci.xml rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Builder/Identity.php (76%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Builder/InvocationMocker.php rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Builder/Match.php (65%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Builder/MethodNameMatch.php rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject/Builder/Namespace.php => Builder/NamespaceMatch.php} (53%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Builder/ParametersMatch.php (63%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Builder/Stub.php (53%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Exception/BadMethodCallException.php rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Exception/Exception.php (62%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Exception/RuntimeException.php create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/ForwardCompatibility/MockObject.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator/mocked_static_method.tpl.dist delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnReference.php delete mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator.php (58%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/deprecation.tpl.dist (100%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/mocked_class.tpl.dist (81%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/mocked_class_method.tpl.dist (68%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/mocked_clone.tpl.dist (100%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/mocked_method.tpl.dist (89%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/mocked_method_void.tpl.dist (89%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Generator/mocked_static_method.tpl.dist rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/proxied_method.tpl.dist (90%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/proxied_method_void.tpl.dist (90%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/trait_class.tpl.dist (100%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/unmocked_clone.tpl.dist (100%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/wsdl_class.tpl.dist (100%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Generator/wsdl_method.tpl.dist (100%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Invocation/Invocation.php rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject/Invocation/Object.php => Invocation/ObjectInvocation.php} (74%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject/Invocation/Static.php => Invocation/StaticInvocation.php} (56%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/InvocationMocker.php (61%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Invokable.php (51%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher.php (59%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/AnyInvokedCount.php (67%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/AnyParameters.php (55%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/ConsecutiveParameters.php (66%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/Invocation.php (60%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/InvokedAtIndex.php (68%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/InvokedAtLeastCount.php (76%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/InvokedAtLeastOnce.php (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/InvokedAtMostCount.php (76%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/InvokedCount.php (67%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/InvokedRecorder.php (52%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/MethodName.php (52%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/Parameters.php (67%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Matcher/StatelessInvocation.php (67%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/MockBuilder.php (75%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/MockObject.php (51%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Stub.php (56%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Stub/ConsecutiveCalls.php (54%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Stub/Exception.php rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Stub/MatcherCollection.php (50%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnArgument.php create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnCallback.php create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnReference.php create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnSelf.php rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject/Stub/Return.php => Stub/ReturnStub.php} (63%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Stub/ReturnValueMap.php (51%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/src/{Framework/MockObject => }/Verifiable.php (68%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Builder/InvocationMockerTest.php (84%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/232.phpt (77%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/tests/Generator/397.phpt rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/abstract_class.phpt (78%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class.phpt (77%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class_call_parent_clone.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class_call_parent_constructor.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class_dont_call_parent_clone.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class_dont_call_parent_constructor.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class_implementing_interface_call_parent_constructor.phpt (72%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class_implementing_interface_dont_call_parent_constructor.phpt (72%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class_partial.phpt (75%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => Generator}/class_with_deprecated_method.phpt (80%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class_with_method_named_method.phpt (75%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/tests/Generator/class_with_method_with_nullable_typehinted_variadic_arguments.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/tests/Generator/class_with_method_with_typehinted_variadic_arguments.phpt rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/class_with_method_with_variadic_arguments.phpt (77%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/interface.phpt (75%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/invocation_object_clone_object.phpt (77%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/namespaced_class.phpt (77%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/namespaced_class_call_parent_clone.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/namespaced_class_call_parent_constructor.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/namespaced_class_dont_call_parent_clone.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/namespaced_class_dont_call_parent_constructor.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/namespaced_class_implementing_interface_call_parent_constructor.phpt (72%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/namespaced_class_implementing_interface_dont_call_parent_constructor.phpt (72%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/namespaced_class_partial.phpt (75%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/namespaced_interface.phpt (75%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/nonexistent_class.phpt (70%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/nonexistent_class_with_namespace.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/nonexistent_class_with_namespace_starting_with_separator.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/nullable_types.phpt (75%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/proxy.phpt (77%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_closure.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_final.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_generator.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_nullable.phpt rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/return_type_declarations_object_method.phpt (72%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/return_type_declarations_self.phpt (72%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/return_type_declarations_static_method.phpt (65%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/return_type_declarations_void.phpt (76%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/scalar_type_declarations.phpt (72%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/wsdl_class.phpt (70%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/wsdl_class_namespace.phpt (71%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Generator/wsdl_class_partial.phpt (64%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject/Invocation/ObjectTest.php => Invocation/ObjectInvocationTest.php} (60%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject/Invocation/StaticTest.php => Invocation/StaticInvocationTest.php} (57%) rename lib/composer/vendor/phpunit/phpunit-mock-objects/tests/{MockObject => }/Matcher/ConsecutiveParametersTest.php (74%) create mode 100644 lib/composer/vendor/phpunit/phpunit-mock-objects/tests/_fixture/ClassWithAllPossibleReturnTypes.php create mode 100644 lib/composer/vendor/phpunit/phpunit/.editorconfig rename lib/composer/vendor/phpunit/phpunit/{ => .github}/CODE_OF_CONDUCT.md (100%) rename lib/composer/vendor/phpunit/phpunit/{ => .github}/CONTRIBUTING.md (87%) create mode 100644 lib/composer/vendor/phpunit/phpunit/.github/ISSUE_TEMPLATE.md create mode 100644 lib/composer/vendor/phpunit/phpunit/.stickler.yml delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-4.0.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-4.1.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-4.2.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-4.3.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-4.4.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-4.5.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-4.6.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-4.7.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-4.8.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-5.0.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-5.1.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-5.2.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-5.3.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-5.4.md delete mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-5.5.md create mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-5.7.md create mode 100644 lib/composer/vendor/phpunit/phpunit/ChangeLog-6.5.md create mode 100644 lib/composer/vendor/phpunit/phpunit/appveyor.yml delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Extensions/GroupTestSuite.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Extensions/PhptTestCase.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Extensions/PhptTestSuite.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Extensions/RepeatedTest.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Extensions/TestDecorator.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Extensions/TicketListener.php rename lib/composer/vendor/phpunit/phpunit/src/Framework/{ => Constraint}/Constraint.php (78%) create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php rename lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/{ExceptionMessageRegExp.php => ExceptionMessageRegularExpression.php} (78%) create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/IsReadable.php create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/IsWritable.php rename lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/{JsonMatches/ErrorMessageProvider.php => JsonMatchesErrorMessageProvider.php} (92%) rename lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/{And.php => LogicalAnd.php} (77%) rename lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/{Not.php => LogicalNot.php} (70%) rename lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/{Or.php => LogicalOr.php} (80%) rename lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/{Xor.php => LogicalXor.php} (80%) rename lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/{PCREMatch.php => RegularExpression.php} (85%) rename lib/composer/vendor/phpunit/phpunit/src/Framework/Constraint/{StringMatches.php => StringMatchesFormatDescription.php} (53%) rename lib/composer/vendor/phpunit/phpunit/src/{ForwardCompatibility/TestCase.php => Framework/CoveredCodeNotExecutedException.php} (74%) rename lib/composer/vendor/phpunit/phpunit/src/Framework/{TestSuite/DataProvider.php => DataProviderTestSuite.php} (73%) delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Framework/Error.php create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Framework/Error/Error.php create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Framework/PHPUnit_Framework_CoveredCodeNotExecutedException.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Framework/PHPUnit_Framework_MissingCoversAnnotationException.php create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php rename lib/composer/vendor/phpunit/phpunit/src/{Util => Framework}/TestSuiteIterator.php (75%) rename lib/composer/vendor/phpunit/phpunit/src/Runner/Filter/{Group/Exclude.php => ExcludeGroupFilterIterator.php} (56%) rename lib/composer/vendor/phpunit/phpunit/src/Runner/Filter/{Group.php => GroupFilterIterator.php} (55%) rename lib/composer/vendor/phpunit/phpunit/src/Runner/Filter/{Group/Include.php => IncludeGroupFilterIterator.php} (56%) rename lib/composer/vendor/phpunit/phpunit/src/Runner/Filter/{Test.php => NameFilterIterator.php} (66%) create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Runner/PhptTestCase.php create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/Json.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/Log/JSON.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/Log/TAP.php rename lib/composer/vendor/phpunit/phpunit/src/Util/{PHP.php => PHP/AbstractPhpProcess.php} (77%) rename lib/composer/vendor/phpunit/phpunit/src/Util/PHP/{Default.php => DefaultPhpProcess.php} (64%) create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/PHP/Template/PhptTestCase.tpl.dist create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/PHP/Template/TestCaseClass.tpl.dist rename lib/composer/vendor/phpunit/phpunit/src/Util/PHP/{Windows.php => WindowsPhpProcess.php} (79%) delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/Regex.php create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/RegularExpression.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/String.php rename lib/composer/vendor/phpunit/phpunit/src/Util/TestDox/{ResultPrinter/HTML.php => HtmlResultPrinter.php} (91%) rename lib/composer/vendor/phpunit/phpunit/src/Util/TestDox/{ResultPrinter/Text.php => TextResultPrinter.php} (87%) rename lib/composer/vendor/phpunit/phpunit/src/Util/TestDox/{ResultPrinter/XML.php => XmlResultPrinter.php} (58%) create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/TextTestListRenderer.php create mode 100644 lib/composer/vendor/phpunit/phpunit/src/Util/XmlTestListRenderer.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Extensions/PhptTestCaseTest.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Extensions/RepeatedTestTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Framework/Constraint/ArraySubsetTest.php rename lib/composer/vendor/phpunit/phpunit/tests/Framework/Constraint/{JsonMatches/ErrorMessageProviderTest.php => JsonMatchesErrorMessageProviderTest.php} (79%) create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Framework/Constraint/LogicalAndTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Framework/Constraint/LogicalOrTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Framework/Constraint/LogicalXorTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2137-filter.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2137-no_filter.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2137/Issue2137Test.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2145.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2145/Issue2145Test.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2366.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2366/Issue2366Test.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2380.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2380/Issue2380Test.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2382.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2382/Issue2382Test.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2435.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2435/Issue2435Test.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2448-existing-test.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2448-not-existing-test.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2448/Test.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-class-preserve-no-bootstrap.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-class-preserve.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-function-no-preserve-no-bootstrap-xdebug.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-function-no-preserve-no-bootstrap.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-function-no-preserve.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-function-preserve.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591/SeparateClassPreserveTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591/SeparateFunctionNoPreserveTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591/SeparateFunctionPreserveTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591/bootstrapNoBootstrap.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591/bootstrapWithBootstrap.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2591/bootstrapWithBootstrapNoGlobal.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2725-separate-class-before-after-pid.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2725/BeforeAfterClassPidTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2731.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2731/Issue2731Test.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2811.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/2811/Issue2811Test.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/873-php5.phpt rename lib/composer/vendor/phpunit/phpunit/tests/Regression/GitHub/{873-php7.phpt => 873.phpt} (94%) delete mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Runner/BaseTestRunnerTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Runner/PhptTestCaseTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/code-coverage-phpt.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/dataprovider-issue-2833.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/dataprovider-issue-2859.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/dataprovider-issue-2922.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/defaulttestsuite-using-testsuite.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/defaulttestsuite.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/list-tests-dataprovider.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/list-tests-xml-dataprovider.phpt delete mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/log-json-post-66021.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/log-junit.phpt delete mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/log-tap.phpt delete mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/log-xml.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/mycommand.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/phar-extension-suppressed.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/phar-extension.phpt delete mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/tap.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/TextUI/teamcity-inner-exceptions.phpt create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Util/JsonTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Util/PHP/AbstractPhpProcessTest.php delete mode 100644 lib/composer/vendor/phpunit/phpunit/tests/Util/PHPTest.php rename lib/composer/vendor/phpunit/phpunit/tests/Util/{RegexTest.php => RegularExpressionTest.php} (70%) create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/ArrayAccessible.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/DataProviderDependencyTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/DataProviderIssue2833/FirstTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/DataProviderIssue2833/SecondTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/DataProviderIssue2859/phpunit.xml create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/DataProviderIssue2859/tests/another/TestWithDataProviderTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/DataProviderIssue2922/FirstTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/DataProviderIssue2922/SecondTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/DummyBarTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/DummyFooTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/MultipleDataProviderTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/MyCommand.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/ParseTestMethodAnnotationsMock.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/StatusTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/TestAutoreferenced.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/TestGeneratorMaker.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/TestIteratorAggregate.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/TestIteratorAggregate2.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/VariousIterableDataProviderTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/WrapperIteratorAggregate.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/configuration.defaulttestsuite.xml create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/configuration.one-file-suite.xml create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/phpunit-example-extension/phpunit.xml create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/phpunit-example-extension/tests/OneTest.php create mode 100644 lib/composer/vendor/phpunit/phpunit/tests/_files/phpunit-example-extension/tools/phpunit.d/phpunit-example-extension-1.0.1.phar create mode 100644 lib/composer/vendor/psr/container/.gitignore create mode 100644 lib/composer/vendor/psr/container/LICENSE create mode 100644 lib/composer/vendor/psr/container/README.md create mode 100644 lib/composer/vendor/psr/container/composer.json create mode 100644 lib/composer/vendor/psr/container/src/ContainerExceptionInterface.php create mode 100644 lib/composer/vendor/psr/container/src/ContainerInterface.php create mode 100644 lib/composer/vendor/psr/container/src/NotFoundExceptionInterface.php create mode 100644 lib/composer/vendor/sebastian/comparator/.php_cs create mode 100644 lib/composer/vendor/sebastian/comparator/ChangeLog.md delete mode 100644 lib/composer/vendor/sebastian/comparator/build/travis-ci.xml create mode 100644 lib/composer/vendor/sebastian/comparator/phpunit.xml delete mode 100644 lib/composer/vendor/sebastian/comparator/phpunit.xml.dist create mode 100644 lib/composer/vendor/sebastian/comparator/tests/ComparisonFailureTest.php rename lib/composer/vendor/sebastian/comparator/tests/{_files => _fixture}/Author.php (93%) rename lib/composer/vendor/sebastian/comparator/tests/{_files => _fixture}/Book.php (99%) rename lib/composer/vendor/sebastian/comparator/tests/{_files => _fixture}/ClassWithToString.php (100%) rename lib/composer/vendor/sebastian/comparator/tests/{_files => _fixture}/SampleClass.php (99%) rename lib/composer/vendor/sebastian/comparator/tests/{_files => _fixture}/Struct.php (99%) rename lib/composer/vendor/sebastian/comparator/tests/{_files => _fixture}/TestClass.php (94%) rename lib/composer/vendor/sebastian/comparator/tests/{_files => _fixture}/TestClassComparator.php (84%) delete mode 100644 lib/composer/vendor/sebastian/comparator/tests/autoload.php delete mode 100644 lib/composer/vendor/sebastian/comparator/tests/bootstrap.php create mode 100644 lib/composer/vendor/sebastian/diff/ChangeLog.md create mode 100644 lib/composer/vendor/sebastian/diff/phpunit.xml delete mode 100644 lib/composer/vendor/sebastian/diff/phpunit.xml.dist create mode 100644 lib/composer/vendor/sebastian/diff/src/Exception/Exception.php create mode 100644 lib/composer/vendor/sebastian/diff/src/Exception/InvalidArgumentException.php delete mode 100644 lib/composer/vendor/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php rename lib/composer/vendor/sebastian/diff/src/{LCS/LongestCommonSubsequence.php => LongestCommonSubsequenceCalculator.php} (58%) create mode 100644 lib/composer/vendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php create mode 100644 lib/composer/vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php create mode 100644 lib/composer/vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php create mode 100644 lib/composer/vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php create mode 100644 lib/composer/vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php rename lib/composer/vendor/sebastian/diff/src/{LCS/TimeEfficientLongestCommonSubsequenceImplementation.php => TimeEfficientLongestCommonSubsequenceCalculator.php} (63%) create mode 100644 lib/composer/vendor/sebastian/diff/tests/ChunkTest.php create mode 100644 lib/composer/vendor/sebastian/diff/tests/DiffTest.php create mode 100644 lib/composer/vendor/sebastian/diff/tests/DifferTestTest.php delete mode 100644 lib/composer/vendor/sebastian/diff/tests/LCS/TimeEfficientImplementationTest.php create mode 100644 lib/composer/vendor/sebastian/diff/tests/LineTest.php create mode 100644 lib/composer/vendor/sebastian/diff/tests/LongestCommonSubsequenceTest.php create mode 100644 lib/composer/vendor/sebastian/diff/tests/MemoryEfficientImplementationTest.php create mode 100644 lib/composer/vendor/sebastian/diff/tests/TimeEfficientImplementationTest.php create mode 100644 lib/composer/vendor/sebastian/environment/.php_cs create mode 100644 lib/composer/vendor/sebastian/environment/ChangeLog.md create mode 100644 lib/composer/vendor/sebastian/environment/src/OperatingSystem.php create mode 100644 lib/composer/vendor/sebastian/environment/tests/OperatingSystemTest.php create mode 100644 lib/composer/vendor/sebastian/exporter/.php_cs create mode 100644 lib/composer/vendor/sebastian/exporter/phpunit.xml delete mode 100644 lib/composer/vendor/sebastian/exporter/phpunit.xml.dist create mode 100644 lib/composer/vendor/sebastian/global-state/.php_cs create mode 100644 lib/composer/vendor/sebastian/global-state/phpunit.xml delete mode 100644 lib/composer/vendor/sebastian/global-state/phpunit.xml.dist rename lib/composer/vendor/sebastian/global-state/src/{ => exceptions}/Exception.php (77%) rename lib/composer/vendor/sebastian/global-state/src/{ => exceptions}/RuntimeException.php (80%) create mode 100644 lib/composer/vendor/sebastian/global-state/tests/CodeExporterTest.php create mode 100644 lib/composer/vendor/sebastian/global-state/tests/RestorerTest.php create mode 100644 lib/composer/vendor/sebastian/object-enumerator/tests/_fixture/ExceptionThrower.php rename lib/composer/vendor/{phpspec/prophecy => sebastian/object-reflector}/.gitignore (51%) create mode 100644 lib/composer/vendor/sebastian/object-reflector/.php_cs create mode 100644 lib/composer/vendor/sebastian/object-reflector/.travis.yml create mode 100644 lib/composer/vendor/sebastian/object-reflector/ChangeLog.md create mode 100644 lib/composer/vendor/sebastian/object-reflector/LICENSE create mode 100644 lib/composer/vendor/sebastian/object-reflector/README.md create mode 100644 lib/composer/vendor/sebastian/object-reflector/build.xml create mode 100644 lib/composer/vendor/sebastian/object-reflector/composer.json create mode 100644 lib/composer/vendor/sebastian/object-reflector/phpunit.xml create mode 100644 lib/composer/vendor/sebastian/object-reflector/src/Exception.php create mode 100644 lib/composer/vendor/sebastian/object-reflector/src/InvalidArgumentException.php create mode 100644 lib/composer/vendor/sebastian/object-reflector/src/ObjectReflector.php create mode 100644 lib/composer/vendor/sebastian/object-reflector/tests/ObjectReflectorTest.php create mode 100644 lib/composer/vendor/sebastian/object-reflector/tests/_fixture/ChildClass.php create mode 100644 lib/composer/vendor/sebastian/object-reflector/tests/_fixture/ClassWithIntegerAttributeName.php create mode 100644 lib/composer/vendor/sebastian/object-reflector/tests/_fixture/ParentClass.php create mode 100644 lib/composer/vendor/sebastian/recursion-context/phpunit.xml delete mode 100644 lib/composer/vendor/sebastian/recursion-context/phpunit.xml.dist create mode 100644 lib/composer/vendor/symfony/console/Command/LockableTrait.php create mode 100644 lib/composer/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php create mode 100644 lib/composer/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php create mode 100644 lib/composer/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php create mode 100644 lib/composer/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php create mode 100644 lib/composer/vendor/symfony/console/Event/ConsoleErrorEvent.php create mode 100644 lib/composer/vendor/symfony/console/EventListener/ErrorListener.php create mode 100644 lib/composer/vendor/symfony/console/Input/StreamableInputInterface.php create mode 100644 lib/composer/vendor/symfony/console/Terminal.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Command/LockableTraitTest.php create mode 100644 lib/composer/vendor/symfony/console/Tests/CommandLoader/ContainerCommandLoaderTest.php create mode 100644 lib/composer/vendor/symfony/console/Tests/CommandLoader/FactoryCommandLoaderTest.php create mode 100644 lib/composer/vendor/symfony/console/Tests/DependencyInjection/AddConsoleCommandPassTest.php create mode 100644 lib/composer/vendor/symfony/console/Tests/EventListener/ErrorListenerTest.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/DescriptorApplicationMbString.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/DescriptorCommand3.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/DescriptorCommand4.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/DescriptorCommandMbString.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/FooLock2Command.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/FooLockCommand.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/FooOptCommand.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/FooSameCaseLowercaseCommand.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/FooSameCaseUppercaseCommand.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_17.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/interactive_command_1.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/interactive_output_1.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_17.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/TestTiti.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/TestToto.php create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/application_filtered_namespace.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/application_mbstring.md create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/application_mbstring.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/application_renderexception_escapeslines.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/application_renderexception_linebreaks.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/command_mbstring.md create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/command_mbstring.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.json create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.md create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.xml create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.json create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.md create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.xml create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.json create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.md create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.xml create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_style.json create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_style.md create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_style.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_style.xml create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.json create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.md create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.txt create mode 100644 lib/composer/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.xml create mode 100644 lib/composer/vendor/symfony/console/Tests/Helper/AbstractQuestionHelperTest.php create mode 100644 lib/composer/vendor/symfony/console/Tests/TerminalTest.php create mode 100644 lib/composer/vendor/symfony/debug/Exception/SilencedErrorContext.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/Fixtures/AnnotatedClass.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/Fixtures/ExtendedFinalMethod.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/Fixtures/FinalClass.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/Fixtures/FinalMethod.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/Fixtures/InternalClass.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/Fixtures/InternalInterface.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/Fixtures/InternalTrait.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/Fixtures/InternalTrait2.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/Fixtures/Throwing.php create mode 100644 lib/composer/vendor/symfony/debug/Tests/phpt/debug_class_loader.phpt create mode 100644 lib/composer/vendor/symfony/debug/Tests/phpt/exception_rethrown.phpt create mode 100644 lib/composer/vendor/symfony/debug/Tests/phpt/fatal_with_nested_handlers.phpt create mode 100644 lib/composer/vendor/symfony/finder/Tests/Fixtures/.dot/a create mode 100644 lib/composer/vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon create mode 100644 lib/composer/vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon create mode 100644 lib/composer/vendor/symfony/finder/Tests/Fixtures/one/.dot mode change 100755 => 100644 lib/composer/vendor/symfony/finder/Tests/GlobTest.php create mode 100644 lib/composer/vendor/symfony/yaml/Command/LintCommand.php create mode 100644 lib/composer/vendor/symfony/yaml/Tag/TaggedValue.php create mode 100644 lib/composer/vendor/symfony/yaml/Tests/Command/LintCommandTest.php create mode 100644 lib/composer/vendor/symfony/yaml/Tests/Fixtures/booleanMappingKeys.yml create mode 100644 lib/composer/vendor/symfony/yaml/Tests/Fixtures/legacyBooleanMappingKeys.yml create mode 100644 lib/composer/vendor/symfony/yaml/Tests/Fixtures/legacyNonStringKeys.yml create mode 100644 lib/composer/vendor/symfony/yaml/Tests/Fixtures/legacyNullMappingKey.yml create mode 100644 lib/composer/vendor/symfony/yaml/Tests/Fixtures/nonStringKeys.yml create mode 100644 lib/composer/vendor/symfony/yaml/Tests/Fixtures/not_readable.yml create mode 100644 lib/composer/vendor/symfony/yaml/Tests/Fixtures/nullMappingKey.yml create mode 100644 lib/composer/vendor/symfony/yaml/Tests/Fixtures/numericMappingKeys.yml create mode 100644 lib/composer/vendor/theseer/tokenizer/.gitignore create mode 100644 lib/composer/vendor/theseer/tokenizer/.php_cs create mode 100644 lib/composer/vendor/theseer/tokenizer/.travis.yml create mode 100644 lib/composer/vendor/theseer/tokenizer/LICENSE create mode 100644 lib/composer/vendor/theseer/tokenizer/README.md create mode 100644 lib/composer/vendor/theseer/tokenizer/build.xml create mode 100644 lib/composer/vendor/theseer/tokenizer/composer.json create mode 100644 lib/composer/vendor/theseer/tokenizer/phive.xml create mode 100644 lib/composer/vendor/theseer/tokenizer/phpunit.xml create mode 100644 lib/composer/vendor/theseer/tokenizer/src/Exception.php create mode 100644 lib/composer/vendor/theseer/tokenizer/src/NamespaceUri.php create mode 100644 lib/composer/vendor/theseer/tokenizer/src/NamespaceUriException.php create mode 100644 lib/composer/vendor/theseer/tokenizer/src/Token.php create mode 100644 lib/composer/vendor/theseer/tokenizer/src/TokenCollection.php create mode 100644 lib/composer/vendor/theseer/tokenizer/src/TokenCollectionException.php create mode 100644 lib/composer/vendor/theseer/tokenizer/src/Tokenizer.php create mode 100644 lib/composer/vendor/theseer/tokenizer/src/XMLSerializer.php create mode 100644 lib/composer/vendor/theseer/tokenizer/tests/NamespaceUriTest.php create mode 100644 lib/composer/vendor/theseer/tokenizer/tests/TokenCollectionTest.php create mode 100644 lib/composer/vendor/theseer/tokenizer/tests/TokenTest.php create mode 100644 lib/composer/vendor/theseer/tokenizer/tests/TokenizerTest.php create mode 100644 lib/composer/vendor/theseer/tokenizer/tests/XMLSerializerTest.php create mode 100644 lib/composer/vendor/theseer/tokenizer/tests/_files/customns.xml create mode 100644 lib/composer/vendor/theseer/tokenizer/tests/_files/test.php create mode 100644 lib/composer/vendor/theseer/tokenizer/tests/_files/test.php.tokens create mode 100644 lib/composer/vendor/theseer/tokenizer/tests/_files/test.php.xml delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/.travis.yml delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/README.md delete mode 100755 lib/composer/vendor/victorjonsson/markdowndocs/bin/phpdoc-md delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/composer.json delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/docs.md delete mode 100755 lib/composer/vendor/victorjonsson/markdowndocs/phpdoc-md delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/phpunit.xml delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/ClassEntity.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/ClassEntityFactory.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/CodeEntity.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/Console/CLI.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/Console/PHPDocsMDCommand.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/DocInfo.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/DocInfoExtractor.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/FunctionEntity.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/FunctionFinder.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/MDTableGenerator.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/ParamEntity.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/Reflector.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/ReflectorInterface.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/UseInspector.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/src/PHPDocsMD/Utils.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/test/ExampleClass.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/test/MDTableGeneratorTest.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/test/ReflectorTest.php delete mode 100644 lib/composer/vendor/victorjonsson/markdowndocs/test/UseInspectorTest.php diff --git a/.travis.yml b/.travis.yml index 3cbcdd24..c1f01697 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,14 +3,13 @@ services: before_script: - echo "USE mysql;\nUPDATE user SET password=PASSWORD('dev') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root install: - - rm $TRAVIS_BUILD_DIR/tools/phpunit - - composer require --dev phpunit/phpunit ^5.7 - - $TRAVIS_BUILD_DIR/vendor/bin/phpunit --version - - cp $TRAVIS_BUILD_DIR/vendor/bin/phpunit $TRAVIS_BUILD_DIR/tools + #- rm $TRAVIS_BUILD_DIR/tools/phpunit + #- composer require --dev phpunit/phpunit ~6.5.5 + #- $TRAVIS_BUILD_DIR/vendor/bin/phpunit --version + #- cp $TRAVIS_BUILD_DIR/vendor/bin/phpunit $TRAVIS_BUILD_DIR/tools script: ant build-ci language: php php: - - '5.6' - '7.0' - '7.1' after_failure: "cat /tmp/icehrm.test.log" diff --git a/lib/composer/composer.json b/lib/composer/composer.json index c52a16d4..54a01347 100644 --- a/lib/composer/composer.json +++ b/lib/composer/composer.json @@ -5,11 +5,13 @@ "gettext/gettext": "4.0.0", "consolidation/robo": "~1", "filp/whoops": "~2.1", - "swiftmailer/swiftmailer": "^6.0" + "swiftmailer/swiftmailer": "^6", + "pear/net_smtp": "~1.7", + "pear/mail": "~1.4" }, "require-dev": { - "phpunit/phpunit": "5.5.*" - }, + "phpunit/phpunit": "~6.5.5" + }, "autoload": { "psr-4": { "": "../../src" diff --git a/lib/composer/composer.lock b/lib/composer/composer.lock index 0e2f7e0a..0c73456b 100644 --- a/lib/composer/composer.lock +++ b/lib/composer/composer.lock @@ -4,35 +4,34 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "1944dee39b7f749b311e58061b00f233", - "content-hash": "7a06e9dbeabacf6aec7777ff8b9d4891", + "hash": "3a99d8f1889b03e3d3d346d1c53e284a", + "content-hash": "0d37f31f02f0af3f426b668e57096b14", "packages": [ { "name": "consolidation/annotated-command", - "version": "2.1.3", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "6dcc442cbdc2c5145bb19e042d6b5f3979003b9f" + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/6dcc442cbdc2c5145bb19e042d6b5f3979003b9f", - "reference": "6dcc442cbdc2c5145bb19e042d6b5f3979003b9f", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/e97c38717eae23a2bafcf3f09438290eee6ebeb4", + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4", "shasum": "" }, "require": { - "consolidation/output-formatters": "^3.1.3", + "consolidation/output-formatters": "^3.1.12", "php": ">=5.4.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "psr/log": "~1", - "symfony/console": "^2.8|~3", - "symfony/event-dispatcher": "^2.5|~3", - "symfony/finder": "^2.5|~3" + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", "squizlabs/php_codesniffer": "^2.7" }, "type": "library", @@ -57,29 +56,84 @@ } ], "description": "Initialize Symfony Console commands from annotated command class methods.", - "time": "2016-11-19 01:02:43" + "time": "2017-11-29 16:23:23" }, { - "name": "consolidation/log", - "version": "1.0.3", + "name": "consolidation/config", + "version": "1.0.9", "source": { "type": "git", - "url": "https://github.com/consolidation/log.git", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254" + "url": "https://github.com/consolidation/config.git", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/log/zipball/74ba81b4edc585616747cc5c5309ce56fec41254", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254", + "url": "https://api.github.com/repos/consolidation/config/zipball/34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Provide configuration services for a commandline tool.", + "time": "2017-12-22 17:28:19" + }, + { + "name": "consolidation/log", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/consolidation/log.git", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/log/zipball/dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821", "shasum": "" }, "require": { "php": ">=5.5.0", "psr/log": "~1.0", - "symfony/console": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4" }, "require-dev": { "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", "squizlabs/php_codesniffer": "2.*" }, "type": "library", @@ -104,37 +158,37 @@ } ], "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", - "time": "2016-03-23 23:46:42" + "time": "2017-11-29 01:44:16" }, { "name": "consolidation/output-formatters", - "version": "3.1.3", + "version": "3.1.13", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4" + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/1e6c6ab49904a31c310940ec4efccf5f36e386e4", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", "shasum": "" }, "require": { "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -153,52 +207,54 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2016-11-18 23:04:31" + "time": "2017-11-29 15:25:38" }, { "name": "consolidation/robo", - "version": "1.0.4", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/consolidation/Robo.git", - "reference": "bfe2246358298d7839114612f84bcfdca3c14066" + "reference": "b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/Robo/zipball/bfe2246358298d7839114612f84bcfdca3c14066", - "reference": "bfe2246358298d7839114612f84bcfdca3c14066", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9", + "reference": "b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9", "shasum": "" }, "require": { - "consolidation/annotated-command": "^2.0.1", + "consolidation/annotated-command": "^2.8.2", + "consolidation/config": "^1.0.1", "consolidation/log": "~1", - "consolidation/output-formatters": "^2.1.2|~3", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", "league/container": "^2.2", "php": ">=5.5.0", - "symfony/console": "~2.8|~3.0", - "symfony/event-dispatcher": "~2.5|~3.0", - "symfony/filesystem": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "symfony/process": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4" }, "replace": { "codegyre/robo": "< 1.0" }, "require-dev": { - "codeception/aspect-mock": "~1", - "codeception/base": "^2.2.6", + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", "codeception/verify": "^0.3.2", - "henrikbjorn/lurker": "~1", - "natxet/cssmin": "~3", + "greg-1-anderson/composer-test-scenarios": "^1", + "natxet/cssmin": "3.0.4", "patchwork/jsqueeze": "~2", "pear/archive_tar": "^1.4.2", "phpunit/php-code-coverage": "~2|~4", - "satooshi/php-coveralls": "~1", - "squizlabs/php_codesniffer": "~2" + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "^2.8" }, "suggest": { "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", - "natxet/CssMin": "For minifying JS files in taskMinify", + "natxet/CssMin": "For minifying CSS files in taskMinify", "patchwork/jsqueeze": "For minifying JS files in taskMinify", "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." }, @@ -208,13 +264,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" } }, "autoload": { - "classmap": [ - "scripts/composer/ScriptHandler.php" - ], "psr-4": { "Robo\\": "src" } @@ -230,22 +284,25 @@ } ], "description": "Modern task runner", - "time": "2016-11-15 19:24:36" + "time": "2017-12-29 06:48:35" }, { "name": "container-interop/container-interop", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, + "require": { + "psr/container": "^1.0" + }, "type": "library", "autoload": { "psr-4": { @@ -257,7 +314,67 @@ "MIT" ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "time": "2014-12-30 15:22:37" + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14 19:40:03" + }, + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20 21:14:22" }, { "name": "doctrine/lexer", @@ -372,16 +489,16 @@ }, { "name": "filp/whoops", - "version": "2.1.10", + "version": "2.1.14", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec" + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", + "url": "https://api.github.com/repos/filp/whoops/zipball/c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", "shasum": "" }, "require": { @@ -390,7 +507,7 @@ }, "require-dev": { "mockery/mockery": "0.9.*", - "phpunit/phpunit": "^4.8 || ^5.0", + "phpunit/phpunit": "^4.8.35 || ^5.7", "symfony/var-dumper": "^2.6 || ^3.0" }, "suggest": { @@ -426,10 +543,10 @@ "exception", "handling", "library", - "whoops", - "zf2" + "throwable", + "whoops" ], - "time": "2017-08-03 18:23:40" + "time": "2017-11-23 18:22:44" }, { "name": "gettext/gettext", @@ -493,21 +610,28 @@ }, { "name": "gettext/languages", - "version": "2.1.2", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/mlocati/cldr-to-gettext-plural-rules.git", - "reference": "c43ade7e3fb68bcf2379036513dce8d20553d9c8" + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/c43ade7e3fb68bcf2379036513dce8d20553d9c8", - "reference": "c43ade7e3fb68bcf2379036513dce8d20553d9c8", + "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/49c39e51569963cc917a924b489e7025bfb9d8c7", + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7", "shasum": "" }, "require": { "php": ">=5.3" }, + "require-dev": { + "phpunit/phpunit": "^4" + }, + "bin": [ + "bin/export-plural-rules", + "bin/export-plural-rules.php" + ], "type": "library", "autoload": { "psr-4": { @@ -543,28 +667,124 @@ "translations", "unicode" ], - "time": "2015-03-27 11:32:41" + "time": "2017-03-23 17:02:28" }, { - "name": "league/container", - "version": "2.2.0", + "name": "grasmash/expander", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/container.git", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1" + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/c0e7d947b690891f700dc4967ead7bdb3d6708c1", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.1", - "php": ">=5.4.0" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21 22:14:55" + }, + { + "name": "grasmash/yaml-expander", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in a yaml file.", + "time": "2017-12-16 16:06:03" + }, + { + "name": "league/container", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" }, "provide": { - "container-interop/container-interop-implementation": "^1.1" + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" }, "replace": { "orno/di": "~2.0" @@ -575,7 +795,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", + "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } }, @@ -607,7 +827,7 @@ "provider", "service" ], - "time": "2016-03-17 11:07:59" + "time": "2017-05-10 09:20:27" }, { "name": "monolog/monolog", @@ -683,125 +903,339 @@ "time": "2015-03-09 09:58:04" }, { - "name": "phpdocumentor/reflection-common", - "version": "1.0", + "name": "pear/console_getopt", + "version": "v1.4.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "url": "https://github.com/pear/Console_Getopt.git", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", "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" - ] + "psr-0": { + "Console": "./" } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" + }, + { + "name": "Andrei Zmievski", + "email": "andrei@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Developer" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "time": "2015-07-20 20:28:12" + }, + { + "name": "pear/mail", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/pear/Mail.git", + "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Mail/zipball/9609ed5e42ac5b221dfd9af85de005c59d418ee7", + "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7", + "shasum": "" + }, + "require": { + "pear/pear-core-minimal": "~1.9", + "php": ">=5.2.1" + }, + "require-dev": { + "pear/pear": "*" + }, + "suggest": { + "pear/net_smtp": "Install optionally via your project's composer.json" + }, + "type": "library", + "autoload": { + "psr-0": { + "Mail": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" + }, + { + "name": "Richard Heyes", + "email": "richard@phpguru.org", + "role": "Developer" + }, + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Developer" + } + ], + "description": "Class that provides multiple interfaces for sending emails.", + "homepage": "http://pear.php.net/package/Mail", + "time": "2017-04-11 17:27:29" + }, + { + "name": "pear/net_smtp", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/pear/Net_SMTP.git", + "reference": "e066e5ee011ae056c03db1a95d210fc09649b477" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/e066e5ee011ae056c03db1a95d210fc09649b477", + "reference": "e066e5ee011ae056c03db1a95d210fc09649b477", + "shasum": "" + }, + "require": { + "pear/net_socket": "*", + "pear/pear-core-minimal": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "pear/auth_sasl": "Install optionally via your project's composer.json" + }, + "type": "library", + "autoload": { + "psr-0": { + "Net": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "PHP-3.01" + ], + "authors": [ + { + "name": "Jon Parise", + "email": "jon@php.net", + "homepage": "http://www.indelible.org", + "role": "Lead" + }, + { + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" + } + ], + "description": "An implementation of the SMTP protocol", + "homepage": "http://pear.github.io/Net_SMTP/", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "email", + "mail", + "smtp" ], - "time": "2015-12-27 11:43:31" + "time": "2017-01-14 18:19:55" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", + "name": "pear/net_socket", + "version": "v1.2.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + "url": "https://github.com/pear/Net_Socket.git", + "reference": "f31d75ac352d49908f8987bbb1496c02a409812a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "url": "https://api.github.com/repos/pear/Net_Socket/zipball/f31d75ac352d49908f8987bbb1496c02a409812a", + "reference": "f31d75ac352d49908f8987bbb1496c02a409812a", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" + "pear/pear_exception": "@stable", + "php": ">=5.4.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "phpunit/phpunit": "^4" }, "type": "library", "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "psr-0": { + "Net": "./" } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" + }, + { + "name": "Aleksander Machniak", + "email": "alec@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Lead" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30 07:12:33" + "description": "More info available on: http://pear.php.net/package/Net_Socket", + "time": "2017-04-06 15:16:38" }, { - "name": "phpdocumentor/type-resolver", - "version": "0.2", + "name": "pear/pear-core-minimal", + "version": "v1.10.3", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + "url": "https://github.com/pear/pear-core-minimal.git", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" + }, + "replace": { + "rsky/pear-core-min": "self.version" + }, + "type": "library", + "autoload": { + "psr-0": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "src/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@php.net", + "role": "Lead" + } + ], + "description": "Minimal set of PEAR core files to be used as composer dependency", + "time": "2017-02-28 16:46:11" + }, + { + "name": "pear/pear_exception", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", + "shasum": "" + }, + "require": { + "php": ">=4.4.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "phpunit/phpunit": "*" + }, + "type": "class", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "PEAR": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "." + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", + "keywords": [ + "exception" + ], + "time": "2015-02-10 20:07:52" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" }, "type": "library", "extra": { @@ -811,9 +1245,7 @@ }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -822,11 +1254,20 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "time": "2016-06-10 07:14:17" + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14 16:28:37" }, { "name": "psr/log", @@ -932,37 +1373,45 @@ }, { "name": "symfony/console", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065" + "reference": "8394c8ef121949e8f858f13bc1e34f05169e4e7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c99da1119ae61e15de0e4829196b9fba6f73d065", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065", + "url": "https://api.github.com/repos/symfony/console/zipball/8394c8ef121949e8f858f13bc1e34f05169e4e7d", + "reference": "8394c8ef121949e8f858f13bc1e34f05169e4e7d", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, "require-dev": { "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/lock": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -989,37 +1438,36 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-10-06 01:44:51" + "time": "2018-01-03 07:37:34" }, { "name": "symfony/debug", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" + "reference": "603b95dda8b00020e4e6e60dc906e7b715b1c245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "url": "https://api.github.com/repos/symfony/debug/zipball/603b95dda8b00020e4e6e60dc906e7b715b1c245", + "reference": "603b95dda8b00020e4e6e60dc906e7b715b1c245", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1046,31 +1494,34 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2018-01-03 17:14:19" }, { "name": "symfony/event-dispatcher", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc" + "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/26b87b6bca8f8f797331a30b76fdae5342dc26ca", + "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -1079,7 +1530,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1106,29 +1557,29 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-10-13 06:28:43" + "time": "2018-01-03 07:37:34" }, { "name": "symfony/filesystem", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6" + "reference": "e078773ad6354af38169faf31c21df0f18ace03d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0565b61bf098cb4dc09f4f103f033138ae4f42c6", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e078773ad6354af38169faf31c21df0f18ace03d", + "reference": "e078773ad6354af38169faf31c21df0f18ace03d", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1155,29 +1606,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-10-18 04:30:12" + "time": "2018-01-03 07:37:34" }, { "name": "symfony/finder", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", + "url": "https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f", + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1204,20 +1655,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-09-28 00:11:12" + "time": "2018-01-03 07:37:34" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -1229,7 +1680,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1263,29 +1714,29 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2017-10-11 12:05:26" }, { "name": "symfony/process", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94" + "reference": "ff69f110c6b33fd33cd2089ba97d6112f44ef0ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94", + "url": "https://api.github.com/repos/symfony/process/zipball/ff69f110c6b33fd33cd2089ba97d6112f44ef0ba", + "reference": "ff69f110c6b33fd33cd2089ba97d6112f44ef0ba", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1312,7 +1763,65 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-09-29 14:13:09" + "time": "2018-01-03 07:37:34" + }, + { + "name": "symfony/yaml", + "version": "v3.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "25c192f25721a74084272671f658797d9e0e0146" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/25c192f25721a74084272671f658797d9e0e0146", + "reference": "25c192f25721a74084272671f658797d9e0e0146", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "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": "3.4-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-03 07:37:34" }, { "name": "twig/twig", @@ -1374,100 +1883,6 @@ "templating" ], "time": "2016-01-11 14:02:19" - }, - { - "name": "victorjonsson/markdowndocs", - "version": "1.3.7", - "source": { - "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" - }, - "require-dev": { - "phpunit/phpunit": "3.7.23" - }, - "bin": [ - "bin/phpdoc-md" - ], - "type": "library", - "autoload": { - "psr-0": { - "PHPDocsMD": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" - } - ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", - "time": "2016-10-11 21:10:19" - }, - { - "name": "webmozart/assert", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", - "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.2-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": "2016-08-09 15:02:57" } ], "packages-dev": [ @@ -1527,37 +1942,40 @@ }, { "name": "myclabs/deep-copy", - "version": "1.5.5", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/399c1f9781e222f6eb6cc238796f5200d1b7f108", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "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", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -1565,36 +1983,291 @@ "object", "object graph" ], - "time": "2016-10-31 17:19:45" + "time": "2017-10-19 19:58:43" }, { - "name": "phpspec/prophecy", - "version": "v1.6.1", + "name": "phar-io/manifest", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "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-05 18:14:27" + }, + { + "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-05 17:38:23" + }, + { + "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-11 18:02:19" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "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-27 17:38:31" + }, + { + "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-14 14:27:02" + }, + { + "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", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.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.0" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -1627,44 +2300,44 @@ "spy", "stub" ], - "time": "2016-06-07 08:13:47" + "time": "2017-11-24 13:59:53" }, { "name": "phpunit/php-code-coverage", - "version": "4.0.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d" + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6cba06ff75a1a63a71033e1a01b89056f3af1e8d", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" + "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": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" + "phpunit/phpunit": "^6.0" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.5.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { @@ -1679,7 +2352,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -1690,20 +2363,20 @@ "testing", "xunit" ], - "time": "2016-11-01 05:06:24" + "time": "2017-12-06 09:29:45" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.1", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -1737,7 +2410,7 @@ "filesystem", "iterator" ], - "time": "2015-06-21 13:08:43" + "time": "2017-11-27 13:52:08" }, { "name": "phpunit/php-text-template", @@ -1782,25 +2455,30 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -1822,33 +2500,33 @@ "keywords": [ "timer" ], - "time": "2016-05-12 18:03:57" + "time": "2017-02-26 11:10:40" }, { "name": "phpunit/php-token-stream", - "version": "1.4.9", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1871,20 +2549,20 @@ "keywords": [ "tokenizer" ], - "time": "2016-11-15 14:06:22" + "time": "2017-11-27 05:48:46" }, { "name": "phpunit/phpunit", - "version": "5.5.7", + "version": "6.5.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3f67cee782c9abfaee5e32fd2f57cdd54bc257ba" + "reference": "83d27937a310f2984fd575686138597147bdc7df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3f67cee782c9abfaee5e32fd2f57cdd54bc257ba", - "reference": "3f67cee782c9abfaee5e32fd2f57cdd54bc257ba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/83d27937a310f2984fd575686138597147bdc7df", + "reference": "83d27937a310f2984fd575686138597147bdc7df", "shasum": "" }, "require": { @@ -1893,34 +2571,35 @@ "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "~1.3", - "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", - "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" + "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" + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" }, "require-dev": { "ext-pdo": "*" }, "suggest": { - "ext-tidy": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "~1.1" + "phpunit/php-invoker": "^1.1" }, "bin": [ "phpunit" @@ -1928,7 +2607,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.5.x-dev" + "dev-master": "6.5.x-dev" } }, "autoload": { @@ -1954,33 +2633,33 @@ "testing", "xunit" ], - "time": "2016-10-03 13:04:15" + "time": "2017-12-17 06:31:19" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.4.1", + "version": "5.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc" + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/45026c8383187ad1dcb14fbfec77dced265b9cfc", - "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2 || ^2.0" + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" }, "conflict": { - "phpunit/phpunit": "<5.4.0" + "phpunit/phpunit": "<6.0" }, "require-dev": { - "phpunit/phpunit": "^5.4" + "phpunit/phpunit": "^6.5" }, "suggest": { "ext-soap": "*" @@ -1988,7 +2667,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { @@ -2003,7 +2682,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2013,27 +2692,27 @@ "mock", "xunit" ], - "time": "2016-11-19 09:07:46" + "time": "2018-01-06 05:45:45" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { @@ -2058,34 +2737,34 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2016-02-13 06:45:14" + "time": "2017-03-04 06:30:41" }, { "name": "sebastian/comparator", - "version": "1.2.2", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f" + "reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a1ed12e8b2409076ab22e3897126211ff8b1f7f", - "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b11c729f95109b56a0fe9650c6a63a0fcd8c439f", + "reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2 || ~2.0" + "php": "^7.0", + "sebastian/diff": "^2.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -2116,38 +2795,38 @@ } ], "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], - "time": "2016-11-19 09:18:40" + "time": "2017-12-22 14:50:35" }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2174,32 +2853,32 @@ "keywords": [ "diff" ], - "time": "2015-12-08 07:14:41" + "time": "2017-08-03 08:09:46" }, { "name": "sebastian/environment", - "version": "1.3.8", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^6.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -2224,34 +2903,34 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2017-07-01 08:51:00" }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -2291,27 +2970,27 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2017-04-03 13:19:02" }, { "name": "sebastian/global-state", - "version": "1.1.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.0" }, "suggest": { "ext-uopz": "*" @@ -2319,7 +2998,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2342,33 +3021,34 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "time": "2017-04-27 15:39:26" }, { "name": "sebastian/object-enumerator", - "version": "1.0.0", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -2388,32 +3068,77 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28 13:25:10" + "time": "2017-08-03 12:35:26" }, { - "name": "sebastian/recursion-context", - "version": "1.0.4", + "name": "sebastian/object-reflector", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/938df7a6478e72795e5f8266cff24d06e3136f2e", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "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-29 09:07:27" + }, + { + "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": { @@ -2441,7 +3166,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-15 06:55:36" + "time": "2017-03-03 06:23:57" }, { "name": "sebastian/resource-operations", @@ -2487,16 +3212,16 @@ }, { "name": "sebastian/version", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { @@ -2526,38 +3251,79 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-02-04 12:56:52" + "time": "2016-10-03 07:35:21" }, { - "name": "symfony/yaml", - "version": "v3.1.6", + "name": "theseer/tokenizer", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", "shasum": "" }, "require": { - "php": ">=5.5.9" + "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-07 12:08:54" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "3.1-dev" + "dev-master": "1.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Webmozart\\Assert\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2565,17 +3331,17 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2016-10-24 18:41:13" + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23 20:04:58" } ], "aliases": [], diff --git a/lib/composer/composer.phar b/lib/composer/composer.phar index 63cb0dfb92bb5b590381ac70cf953a5e6527bbba..086bc68121ddbf04be7c90d1428c12fcca5ac8ea 100644 GIT binary patch literal 1857625 zcmdpf34EMab#GV#L_i3Hoj}Hp>>1gXWIG7~*-@g%vMunUNXkMiM~tPBH1TLgnHhOW z?2ra1J3Ja_fd)d@p`~nvJ}9J=6ewE@lqH4Nur+P-AnZE<-v58@IrqEYG9%dzeed^D z>ZAF-d(S=R+;h)8_uO;uch-vD#YVk%U%A>_svgKK%q?_mzJUMsuIb3F$&JsI8@ZWs zrIZ6)DAt>~+DvY+Hos77ll4 z|9e`kK3&dTRGXbG7pt}0=Bs-4>E9PNN|ouJeNvRAx7O;p=3FT^vskI*rfLg^>*d+G zX0BMB&Q;1&rD_9oRcC5wv{|lI*X0%}r6QgkD3=bhI;&c_=3KE!CMvb5VzV@z!!N$x zS8FzF^W>^&tdgzXj*i~m+`xfac{(>RGMJkxE;h>5*<2k>qxej*S*+wr^?I!iv6Sk$ zxn^^r(bwBMTW-!R?(3PV&G+K}MM}{hH~AuTq+vs+2QcP8Fx-N|XBzPfnL+ii?$IzN;&DZ3m^y zCJvP9(g0~G)=LF+tUl7l*5&eN_pI;PurZIn`p=JQ3kFcpFe*|Ft;?9_L0e<-8;1PtOhSxm_{eFxpg_H5SYk8wt*!1luwde<(jqJdWb)F zxVBj5Xy`##q?$b1akQgjWUg56>zgkw@Q*^?2<=(G&pc>Dhm@;G=r65 zqp`EN5JU49ponM)Py6ntUt?$<4OB5|2C30(xOuv(L3q-`SD$4yR;6k<)#x4AS6gg? zE9wameCECm0pW*kxoyr6))vhnOC#m;kq2``*tRrVXty4bGLO_K#GGP1?uN($$Rs z*$oeI$Os?!{4IZM$kwz(2E$sHo(Zt*J=tL)JoAQc{Iy|O-4aW!I#ZqvFg$O&!$9~C zUp@INhM~J9hI$DDd!$~wsx%dLb?#h;i13j&T=8f_)UvCcj6<3HjcN;F?L8m-wV^1q zqGe0DI9tU$81VDuZH^4WAO7r~2OExcEpaT)FW9IH@I0c!;UUaF{V!i) zP`~^@SD*0yL%+M;>bLBfZI#--VkN+Ek76MFx9u;RFbpjz*j}3tC2`xSjsn7Wee>`| zOV%H*mctHR9Cq~y&ph)zUfuJpBspAdU``HM_^sLx!u3Dzdx4SAvO{+`mm*Y()yf9p zzZ`h>la|D>d$Gx>XF3q&yR|b3&->;z`wd4|D^{T1bLD;IW=KeA%N{@bvL70fmOVOJ znyU+;zWWqIlA2Gn;a-Pfpi(Y|0;#F-A$;h$cT@~bOM#5Rf=$f@+(J$Y1y47#ZN3+;m z3?uLkaPpMlXh}s%4(~e4VIcgoU%zDB zFtnuN(qg5|p%TdAES+r$UvScEuQMEv%jgle0>LbQmJTn%-L?0B(JDPAU5T>~9fOar zbhHv~{rGEdu__tU4y(XZA{c{9I8_?1HcR!H;*_{3r|O(R_`Zki=`}s1e(jHj77b5ID3NQ1osoO_jOOXb{oG4|9kJFL>2o zb{e9Tr;>?CRxu+raCn%=?u%}uViNxB-wr&>ko6{eHv^gYpXI61#fo&+-`vlkBK+)i z?|Pr1>R$$`-B{#_#Cvs~@efGkpsE4kUr+pOjbX;z758m3i1dhhcNXjW#mZ?DrD^|; zjr>9zA^gEVee)OA$kUInkxQ_=k{L76%x|?B!pEI`mUj&=Jf>zm<+0)NFTlahB>dNJ zul{#q;rwI5JtjKmTcB({h&2fj6Rv(kslyOocua`BNMg8$RUm|0fAg_V8SY~v+S$t( z;yKkv!k>?Qd9NYHI9^g~+yIFQ_nj&O!pGkHqESPavPBt6I8v)sD93lNbaEto;wdj( zWjIoEa~6(z4PlCTqIoqIb?gqp`~CIv{^3~A(CfhDL^RL7ze7WK=cOahF*M8J$Oiof zblF7swQFDU62q|^V?-PqcOa5cFIL2|y;TV!yzcY)9~-jeh=<6=O2XGWbjBi_{HGh9 zU}(-+M#n3f*wT8(6P%m~Z+YJ{Pd0qZQ6$ATOeS@~|8SiM2>*QW9&f)lE|a{=icR=g zbH#F%omf`2B%J%fYt|WY$AoQLy|^$(Y~NDa2wzbD=>fyG-0l?GcGae3Lbyu@AmQBY zU-0YKHOpYs86lE%^HZGk37@p^^L<9rlb4OSd{?N1-*2qpaLk&nN{2wl!pI*!0+qc~+0{_E)u72&yG+5S;OmG%{C2dfg@ ztoIJM;K~;Ngsi^r6o-iLD?hyBWl~qN>Q58CuyFU^8k)46(r8Nc7)77fo+O-YtniDJ^vDcQ9hhnu zRS9%oPzDKC|NTv#!L-6g=(ZwwAEBenU!o?FaKjDXdE|2VBbLVDMzb^@Q>hN+kFclv zNiQ-~Dc>`qpm%Gn(I{7<2PEm44|Y9A`1|3vd*3s)u#BqpZYwvVUqo^N>?gaQu=JA0 zqifT3CcMpHFYB<_aGE!{L#j!m7 z;f^1|r@nHvUz4pz@5dshQMKL?EOJMRQ~ROILx-Amj93@MUDPRp@S5j5>Ul;{Pg`7d zgbt??+VfVmB81<5_Gxc3Ol^5XKszFmeRZd5GT|McI`cmbOS=vqO(J=nl0x|8Q_j9* zIY`D1RO6IAX+4|Bu$+X$_v4QE_;8Y=C`FgOP+MefhPg zTGcELcVREvHTY4blyK`a8=r1nOIPX=r@8zlCl|uI?p$+*)k+y)3nSEfFDh4y^~3%* zrTcX?dxV=0_2&#r$}RV`6w64x)WFtMJP!65u+1JO{OGx_@smQz{zcgIFA1sy&R4g_ zdkAkm`r`A9u9T9dFqP_le4mQBo8%ByzI095khBqzM<+;RwReXyMfkm&FWhEWQckX~ zYr&z!X#S3x8^SA}eWUN^wLl!R=@FtG<$d*JmtCoLkMOj|f39xyr2Ntd&CXI26N9(| z{vmt+Ce=K`Pdwt|D-2c2mit;T1+@kLi#XP*&J%w0Z+0Fv9QoEg{) zWr$LgsQh{*psPP9iIdg75q|K`uJdUS=OtP32;8#S*3b0vWHE++G;n{4nis;u&sgi% z^~Zq{SqC!5+@WKe@FDMg?+1-d_&9ORX+dQvu;}mBVMRFmyD$0;va^?qE54+Dp!NXa zkN&#ftJ2cw=vu&+sVq)Yf-1Z}Rn;Oq{DJd7VVo{4JnUP^9#jhDnMxtyi^i_-&Rc3~ zO$iT6+7z~{)kYGYduw^M5x8MV@oi^RDbDSKwO7cgZkQ=~D;Nh3I-A^j>h z!q=bs0`JqMMpOzD{P_^khjl6<@QPT+|7f24#ux)Vr>Gk)gbxRUai##(&17HLa)#-}KWRK2)+?YIh>%vD}*4pX__) zZ;jf%Wl}q~fZfcQGV*Cc8H91{J6`b`zcrFt=Y{!Dd&2u3edb{! zH8s(Dq|6jmUD+Xj6U~{JfjPYqRJ@QESmZQJ+Q+UfU>TvXq)@n_~ z9?{kL7>A7TWA%I9ZFHU6QbnA=%qytQ%4m%cJ^*S!>IlDZ^3xt>2vcjvh|#J2Zmxa% z3RjhI;DtZ)1~Au(7Dd61{}dLOY?g59wwL(~$JA=cnpGH+?CaI7BmB)Luk=%3OC%I& z(yux56h{f+DU;X#(ge`bj0gQfP9CmSi}1cL{ijK*-*P?)>c_bGpw5?sE9Z-s8lsje zrvuXl=r-&=GPfNx?a^UH_^s~y{lrkUoGlZmMv8UCRMSb0aQ;cxZ!%0R{iy^dWF8^k z(fP7ZSAUA|y_+BQkA^EPDOp(bN@%cLDK`%Xf0Dh+pkP!U!vC0j+Xh3F_EXY`T#_vo z9S6$lGX9xjBmB+oZ}%Iv^au#Bxz)k5v?}2zu71>7tD4pwt?F9$%l&Vwts;EiCq8-E zQuW=6D_ZD(Oxq{C@^im?fYs0AcWiy`D)!on4KAc50{v7`5O(F)+-@jVwM7wl$!CID zb_U^hU%Jw7I<0Gkpf1Y*3$J=vJX2*sc+yk5y_rm{`7Y)zJC--SW6gS*xwJ@7(sLB{ zic0b%9hZdpp7;HiF_xO4xKM1Ap`(YLClmc9n$u5p>=EAe+2%=xCN-3zYCzL0L%z-E z5i$L(sz2fL|Lqr>4O41jimFLaG5Sd?d(~?s{P)#ox84tls`-5R=n*mP8F!o!zG?AN zKZ;WJCaR{GkXR5sBdSdga;OO3^sccpjkVOiZ&XcF(-!Mo7eiR$;t5>xj3qK720Q`Ld+*4w`ITq7~1UQsn46q}YgGkQUMZ&ca{dw+hNw;Cz0 zDykOYYei&;^wN%3`nd!f^zreWg*18=6XNrfP{PN)@u>^O_>6!$8^81t~IijnY} zH-6XWLD8C=|wua+vKC3>f%X;}4yaOy!%_SjP9EQw7q4dYZ7@%)22kc55XYkcxmJG;T~ zo+JsxD7stMc!U@H<1_rWKs(KiV`?-vtdBVSD|L7XU;UM@`{M$~gl|KHZ?)nh{P89G z9%S-Qxui*nMX6ZvwZ+vs6A(W2)W@7}2-_JZVK_o)y>PYm0^!Vu#{H7E-GCBQs;?2o z$R&C%wh_fD5q9qIG5RGn#JjLgL*A|0Pk8e~|K~%D%_Z@S!l&Y9lWN+ZD364-8((;v z;b}XHplMNeP+#AnToHEN{A?c-Z>z8VjE>Eq#B?9su_wIW~>^|Lav>U+0F@m*#B+GbAc{S*S z|N4{dCmW`v`imJV9?7HB3J^Z=%h&i!g{6>yqzK7>=x8G>ef3@4M#)lo=#j*XK$wUA z$;41<24OeCzK&_0Xm2Ysv`sWMxBjQc;qzX0e;*9b0bgu2936-1 zeR}Dz)P1cAjqt(W|MafbZTq8C7I%^QVIIZj-v9DvTm4kqmo&>29#@{*UaBB?PL=wM z>HuN?HHZGx>ZSq^QrDXgR$Zl;AB5HOXaB{jrbI4PZR2NWndkpm|2--)!gqe;m#tU- zTAycuG?eHNy!liobHbR_kU+~AD7uOrU6!3vD#H4tTcZ6RjYJHt4f$VSnr?J5E1_U?Gtw{Sr2ms z>%ICRu06uXT(o1W)ywW$oFt93Vy|ii;a~mxUH@)XJ2Oe$RYOSY&|$2O5ZjSl>|1r& zKzPO4ch6gW*sb_zke;zwfJEPbIgFAeTzAvHLrc_DCy+Jo(f%ZCymRJ1t>&uiHtV%1 zge+aoms6*&J=ir(_{J~(tDkz%T^U64q-fJ^D$9zWB>Z-t!$7$6S66-BNXTY;4BPxj z36imJ7t9vfCcN>|t7fd`ip;jh7N!sBv0FBKKeZo(x1QJWBdfe7yK)n!!RN8+Y2qr4 zz~g-^GR8;(;b*q5Ibc|_bsF<6o4yqu5i1dXZvTybXFprV#w(3T#}-tr3Exz@<3HNB zcS&82+T4n0yR--RrQ2`$XRDNw@a5B`eT%cfaKG_kt|sA^FZ+s*nSgNV-F*npb2D#& zY=tMI9yNUQCTk|8OLhvqS8i{Jb~Y+l(2`EVKl$Yzf9&imw1!kLe@jJo-3I`>8%VdD zFZNu8y`Uc|v4nrL?epFzW4>UldQj)^D_xU>@B8cro@q2c8FesCP1owa)!qgas2hg` zc^6Ehml)+q$@a1uLd8)PHsSqxpYb}w$i@0HFNF^b6kJ(C2MIhhgC$(7%c4c9k<>=QGam zd(X?jw4>YzPl;clu~5QKz47&rHqPkFx1>pAB#w}H6L+C3r9(LS^)HnS$L7{Jwv-xj zUL7hH9J95jdOqj#N*m#;UwW?JJ!C+&1#N}_c%wflv6rgE2=DsgQ*JgI82~*NTruDE z9#kgdgzvfdfqvl`sCy%!775g;ocIWzcgif$6@i~_}&Y{Ng4@X_Re2@+wgHku{4dB&sXB;?h9Xr=mfW?W0KQSAib=x3iXXZYIaQcHZX zj(@T065)@3^rMd&;x?AICE~H>VYik2G<7`*|9Q)pALbXe7H4~;F_NF7Bn$k=X+CPw zf4tbonn;498uV-EjBw8%|J|ROFxprZ=l^0lgLmqAh@9d>I!O}ldi(7kHjE59wNQVL z(dOU?+d-v|@Z;Nm*kjmwmc~{tR%){mreEtkLHOZ^?EWLegjL!SbY(C(r7JbU8-M#3 zKHgDS5?Msh+tdRfys7q^vzJeh!x7VvJJB$$8R3~PeEnk$8N#$naOaTe3H47YO@uei zJnCFSvvlVT)43fuh|2~e4yROY34ip<|8c~y^)5*iR^wdTMyS4UisO&)!uNc~_a1j3 z+G`b1&0=}bxTq-0)cva*BEs)I?)%>TXyd~5HyjL zPSyAl;l-mLdXgbpS{Ve*sNApMolE@U{r$6|U-x)EhmmrOBdjZk@Z?tZoy4)wsy2EQpmL5Q z#r0U#ZNgvuc9*vROX6W(Sanu#5>I$gV(NPn1)~SkXe-ORV|Z|A*Vs^(PLhOw(>3J7 zIc$P3o*f_@dYMFQ=~* zmoD)lRPWa5l5p?->uM&OHtXXoRI&d5rm7|3^Zxh~e&n|4H^s>VrV(xbta?QFSFd`J zUxu`CQ4~*v<5enl!ZR0U{F<|k&lJNEW9%_X5aCJRd%$WFRvSy8$e@vk_eNxW>|{6E z2=D*q&BKPNjhAB68S;Z_2pZZ?>O+_SweeBS2NSW@U$7m4v+jBQ-M$?S64soPf50!xD}OiN<2*;Ky;qG5x(QAr}-qAHlEiw z(q4IjBDzG+J)xNYSy?1(yzZ$!C#emKicZ5l5vq6SEJgVKo^SiZx*5Yx;`?f#U~waB z*HjBdc>YOq|H~wvVR9V~S&Na8a1-XEhl&?i&91b*1T_c3zTOX6(d)3P%-2US)Jj~E#tTK}5 zV9j^W?8FXaJub!Tpk!1&!tcJV=EJ!eVV@+*OK^&nSFcZRU98HDRWVwhuiZoVhHW=g zjn<5?Tua0_RzFvZM<)MR(GtFG$JhD{ZOakoi3)c19tZi8X~ObvYKq%evl zK5$a6+4tu?!Zkwpg{yjfUg*&B8%g1fS@&=g_a8oZ(WNGeoy%_^)rF}R$;l!@OB5I3 zU02=jan{h&kE0>irJ2p_(piD+d#{XNCf5NN&^`K9W%9vOKGRd{Ozl^l~93CQNNci26=!ou$wzMtLtr;UdAYeyr zYJV`&-=I20xaH-Wyr+>d?i2%ZTB( zK(-Za1PEWG%UHs_2lo3jEf7~yjOwK$J!siFte zv?Gd;aCrQapELS0JUV67+l1bMDTZ>lApfBhpE{qTBbx9dw>EAvq!}}E8mZH_t;KR> zu^!)u`b+h32rs|$R^;E|cIVALqZP#=gp#v?4g~!wDZ~letMV8n+4u8d^ z(53d0@Ox8N`DyvWWgwTe9(sxis9B=;kcxuvv7i2>k4d)H(4j*M43_hJVDu+7;DPFk z628CoCBI6}w0@$YQT<+iWr9d%5DB9FC9M45fBDc$Mr_k}ji+a{G+R1EEcbty!$Np* z{l;6YJ6aExfE1)(F2>`4pVJN?eD8I?+-K-=EjwVVSZ0#)L9ATK5aGp-|Gi&8WUSPb zArr;Zbs`|V>Ra#e?r4VVtTpYb-rm8*20mSdnGMr|JtQ%Ew6_W0dH*~8ao9}1L%PUn ziwPO!?W$?4hZHN}!+v@{-)F5yX@nKK!*eareqW_dc+clvd$mb@przD3S`04UZn6d6 zsNmV?!)coDR^bv>PyU(TE6)fOCxr`SxFMuD*RbX&*_4mRCV@;xDc)Tq5}9FGjy2QFpR0HYUvu}Fk2Ji?B(_?d&mgw0-9^}Z z(Bl^kX=}eFlt4mJZ&L~hU$gf8cNnrvS2oVMT>F7*Tt=qk9CQM4xAr^XhyLk{lZLqU zyyvN8pQmN{&&oF8ht7D%Ck^2;C>`Ztr3Q``c|EnZs8Oe%;tU62?h&{BogrSvSRE^0 zQ))4&N-9{woB!lnKBK3#Wi*<4$8aGjLk0GLM6OY_C%pb=e|@D9`NWoEbO~2E-?F02 zWR?QNwl7fMmhd$r2VY=quUZ0y4}UJ`TtoQSe>pn43{nGXkDz96J>m#qkgDUO3SZUefcJe=}|_Op7Cp zXcV98;3rHPy^B?TdZpM~sU3uihf|Qmy>Y@agUE}7$jN(;SLi1{+th~@pE`f`LVg8Qs{3PX>@CENZ&GQ_t zCYC_!O!)h&Z@$@B4$Tnp1&2s7diME0y1=hPRwsHksL7Ktr9(wteaN=+ z$_wG}87IHd+76wXMB8%qvr@(Y!EqMi7*xF^{QS|EEM(xg3QN>-mG=tns~r>t)w4mS zqdC=4!VmrD1Kw^p0xQ-U$27K$dif8j`H^x&IP-)@_{iX{NG7c@kvHn&m>gV^yc2gD zBJKx(cf^Db_nR%RKWE;$6=?-MAXN*IJ3q6ya{e?{gRXpx=ph*HCqlCjx`+3QvGu`qE1_8)Mr} zkg?#v;U?`N!WF$;KI?YmM4OOHkmKw;_mQrj2yYy}>1)Q$iMD0o-cWR}(aDSOQBS&N z^}W^B?tSj_y2m{`1X%~_|U!8mK)M>8Sc^%OnC9X%=;b66P4kZEc)VYJxeVd z;hPV>#%EDneuBEeV3K^|8HYOX5n}(77OJRi5Aixu=G0fX z5kdHZue|(0#@N>55afi!M@wsa7?3|i z2nSZ|@V6q|EA2Tm*0R0-+W3p#8Gn1xzOIIs?eTcT#-D3%XKA`z^doN_hU< ze?HI}zU*FUSVB~n)XT9Z4{DQyySjh8$C^Bzq303nN!O{`bkfzoLv0!1#Q%I~hc$O% z99sM>GyS5b91-;49NeTY$WM@SQcfRa7KQo?!rR}oE{OHWo*=L{qRHEgF zuxOkKXU_S>`wZ>CaZv9p#~60x@DVy9ze&Ag!u#Giv)hnA?L?8s+<^OF-A5J(YcE`T z)LJkI4CJ6eK^Q-V%K5i|dYTzw1FvpvE+zZ>xJx8qq>B-$HXbXSDDS=~6oFTHh# z-;q9^;gV>A8ywq8y!DrxhZ1I5rK&}E?#k0%Zvwm*TEjP^G$m8+?xOhCsm2j*c;&f% zyc~~PoZt;VeNV+ygzrWKs9K`QqHGFJS8ghn*ES;>;M#4AV-1SXEzvV>G zs}d6b>eHRZ5q|jlH~47g_T$5EHZvxoX9E|tn(z@%yZ%h$fnM8jh$y=so~w-z-u)j> z@Zqaq!(rJ*EOw37Cslkpx_+(Gyh`ohx1>n8?bbp6Ey*{Pcsb^IsWzbcAK0QODM`-(5dn z6`gS5JumeRMlf2e#t3R+W7TVRbl7H-A|d=y|JiR_nD|h-6PCB|8no@ zo`v6PNRu>ymK|_71ZD7qS}Pq@EO(h9<^SC<*V1@)Y}P9HfDDV@ zpsf>r^``InkZL|E?roCQn`AB)zG91H2BMf&6ogmY@)n=fmNiB_3drOfR(_R=kMMP8 zTREV|s+Xev!d&%9|$ z)Z*6r1eZwe$VlR?yD)bmyf+uZwQT2!h7$)=8@5M+X^2JUWmGAeXN!fMtROF?7NivrTgDqT4%Dkw#!S%}3BB*k0k z%#?c2TIPE&Xl-Y{k0{CDZ~%Q*=wuHD&1i=jR{m^@1kph4H$xU`>vG9qoa>xN(ttkoctU#uopQ*- zhwE~k&0>8P3Q?}(@5WTII?|}GS3F*~`3mxb!Gj}$_4($_aKIy5wcf^{8TUDAJ@GAGN0zZ{ySgSp7y6;LF2kD*#^;CPMC zU>-Vz%Q_nv2GY&l{SbH|@4VXX>2f{KCOUHbzs`N~wa(@oM|ad>cYl>z+Z9mDgzExl z_=VUXKsj}Ay3mFHK#Rl8qQ{D-4UK{sb0Cjm6f473IZdE#n9|2MMA`1LE7nbF^CS)D zQWkJ0tr`7NofO8ZX^HNl&b%cED0lw(YR_{QDv^(Ke+JuO{8*J-G&lDa5*Y^X8%5TRYU{>+Q{% zdL>p1xeI5VA5xmm?K|xKy^fBFsLi;Nxt`mE0vx;`iLc`%L6PdE=3>37R;Z%`v{1Xa z%vh2@TZ{a+k_KC};J)~a>6{!nbGnbInmRw=MWMy45}S>piAzl1V6j@O;`+9VO*61s z7z)-OoOQG@9L;Q$%u>L9Mg*bLgC^MH9l4nr6n1J36O%`^ClA?mug~wz6&txuuM;%* zK!(#wGU1dCEpP;bEj&T%I#X=wh%icFLBhY%wf5|dsD>#fCaOgtFcu)$jC*Y0;)mem zEYs;pspCopPPYe&^-1@z5YZnE7|)VZ^Pcl_D|7fSg{MEa5+cqh?RZ_;Q%0sE38tk1 zMV<~3QqRh+brV%!0EHPix;Dwnc3p7J|G!<}hwu`@kCi)SvBzqgz@1+`UtCzygou-d zf?U`CcbgGEpSnx(q10U1Kpi=PZFF<^1S47ug}tMDCGKLffS=zAUAfh(b1O>x6n7zp z*IR%t8MGBFqADEYjYX#QV}XV%dBahf^t4h$1#MzdhkwzPTbtVeZs4|H$d-saKA5Dh zCn5ZTUm3!bNomrg6GJ%A-Ag~pkE+i)xgVd6X~`aKs7^pzk#p?nT>j+jJ1S{H6c;9(vUW+~Yvo^7o9KjJ!_IF>dJl!XDX0(#+6^NwdWe8H z`JXr46aFpDxBa5vT|xIR)oXoj1)NN11vb2l+;vfnWEEC~-->)~E@(nzM`ORxB#bCn zbgcG7+R+P3>y)FxuO$>Jz<+pWB13mLz3uAi$#Vn;;$XWZeuZxa4B*x`xRA2b zI;jr$B#8i5GSy_UqH3rylh*9iOII)A1Tp0TjF@=CqKbqn6N$u$1Az$fc>p{2!MWXE z!I}tCakfBM(BW$;)7XIEgI-5$fc-jzXRw z3m%WHWkHuyEwenyWg#UPOoijMF)W?KTH$2qP^l{dn?axC9M}!|B>0>8V#McFHXz*I zw|8KoIoT1iCn9aHcqT>xXLDKZO6N5|OB0Rj6QzW*fHd~k8*qvOr=#I;Lm~mC$(A$x ztl4^PaX}odh(Y&E3d^5y_T>=_w@~XihmjDGtFdUkG7cQB?*4KEhqr2##b#-Q+D}u{ zh4rJDoW95%bE`zYbo0!La$^#|TzNJd4RdO*=NYpuqNwQg=#i{b^LaEvy~YYPdIj?w zsF!-U#p&rmZWh3mJ_dgg#L-0CD8kC>nKf}tS=F*~V;CNhF@TYa+U zT>pECRthFbU&nr@Y}P1XNWlv8S<*Ev zoD@;0w-k!k*ET}4l9Ki{T8TPdfU=%} zjF&T}YF8J040sfA35I+J%b@)c+7Btm{p`i>~qUwQ}urcYW zFe~Wji0ULFqoBYUzZQ*ox`Vc8-er?L#%UMmZf%vSLS&-y zL7j*n4r3sR4`R<1{>X~j<1wa=cr2cEr03!tV0$u+;!J6%Q>2?3pZF>=IfXp5P$-TXOw0ms)54(Q^$I-T|eH7qcaj0Ou)T8oK zB9z7XrS63||B*w83c9x8MqcD**{G3C_>%N1yi#$3p%!hNO}CJdiO>gD#W7oe*`jL3 z3@l9$ABI5};@5pI{2A#reh^1j&q^156i=kwzy@}-rM$=af4U|VDnPb9Wz$ARI3KAJ zVxJt&n)h{mEd~O7JqazvysX{=_j`^Y+=G~Y>4=^aKhkI}?(1q?(0jBD&BZdji6umm zAb6i}JxLN4U$V+)2+4V1t_RAs?*4?gOcl!HB*?%CXH zjO9Bxh2j4!80Hc4aeCm`4$Yu0ol;7=^q}Z$%+(HhIjUq)P25wA3yox03qCicuMan9 zAuXlF(8$D!6{mGAR)pE3RRoaAs7UU%WaJ68*w@#+6`!#ai>_+ei7Gy|AE!%Pbk?AlrE~4RZ+Iq>_fc9Z(!B=lBWtnwRyW=0sX#V=~6T^?YU$CB%U z3rm`~YXEzK-g+k~OiNtFA_*wwmO6tZQqPQWTMXOEyZAM>Ph?q1-H|Az5h*yvZH~l7 z8W+Tz2$JpW;?^7r+u%m-m( zwTmGR3&Robye8&1(d@~sl@VVG1_xx7%H$Bq+)F9tsm7K|i9W+Np` zNh~841!5!;CF=n{Uy4K#w82zBlkCF4vOf@nzt-itH;8zbB_|2-<$Mc`+&pgf$RY2+ z$)^~-$~Ek3NElervNoTau3;~sT5GPOwG3Z@L=}&QbzC-9%6KGpPi2(&A&;@ML>7^# zZLs5l8aCD@8*}9u%)#1ectg!%2#1@fqTH^u`FeO0JzuJx+e?kNys1OTpIoe_n#ME~ zFAG|r=161W7;x4kE(!)*Ln0t}_Sbs)n*k~rEr=EzBbswE(8xSFAMT@PP~?HN|S! zwRfCzi3;mFG=y$X&cPEe8W$X-X8?iYg=0~k%Aa_YO{EmkS2icOp_R-pbS{8f^%Qhm znfZ~q6d4aiTxbRHF;PsM2rW(SXnoX+^|j*rlxeGm%@C)ft#$&$^1Eic`?0c!nJ$b} zxY4wzaHm=~&uJ#xsA}`AxABwBkDw=yl?2~~85=yD`7}D8m=FHDw}~?QCL&#C9Sx#4 z>xVfX2fZSy0NZHElS_KC>(pPAeL2P_j^^;;LuR>5j3&M&i>wXl1@kpy%ZO+df%QR2 z+=iXF>k*z&0Zx11imR3czPKY_e4z|CC@UtZLn4|U)&-sY}DLs{DRmu$qVPYglaHla4mQvy))u06DX6Iv(S4<9A zm||KF>NR9)*6|l`BAaSKIqrJ}uMr1=(gp7WL$o4%F20$w{i1HMcN$5^BU&B}!2oGP zxD-RjK^MM}s+OL!5_`Vt7C?6?@?#B00D%T1qEV7cFVyyB-(8~o$Cq| z+iF^-MVFz8KtmuO*+EI~(@RO|Vg5yXY~ew6T`w~|#G|2+kUv;Ncu<7#YWkq=zzxij8MjahB}lt7=D{-~Oyvy$R1lG>DyB5P<=T6IJ- z%IM~G8Z4_Ib_)6=Mp8D=_|^o`hRg6(GB3U0B?tx`-L?^XEZt!=LVgjwIdEn4B|1mF z%`kY{JAr)yd{cUDrwE(0xTr;hdu5&_`g*0K#a!z@y4V83im8|mCWHaqIj4GuyYDUcjG)n-SZy>1K{NF*(t|{mJ?12|EYX$g&T-qF zU9u99R33VWa3496Lr6FNPzFg$d?3ekwPhLSZ)|`Q=u;D-y{#VKIz;bvu_dmY>TVV) z(PuM+m@VzJPDVyPH(|4 z^`*_NIhGO8Y8P2Xq|}KrI5}SO*3T3E$nL~MP}dC{LjaRXqU=9QYSevAnPq~yva^|y z(8%g7@?HbA${^OSDH^59OkbY~gQM946q3gcu!m5dGi$*>2+Z-=O}yM*y*k1S+h5qG1VC=2vtI-F+P zq#GZZVmf6Iz-nO>pLSwBHF;#s+& z7?STSm7GLPjtz|rj1G+N9>sVM*Ee)HIyyr7#eRuPM4Jrm#>NN6hX*HzcMXqw(k5uD z#$>)o{6Qg%vh_ zadJftKIX4Mx?}`N>i~5v;Le&McDuX*9^~RX{TpB+KxyVG$M%B)WpPqfiEtLFLBfo z_DLFcjCS|SuDq|q8Hui4#6AndA0)8%b(e(k}S|J}a&5&6KYei(jq@*0S zl-{WEPRu>Q*t#Un@1*G93vX6e%5e|yMI${w6*(maxBrmcfoi=a<*Zric@ zqJbS_dvMI(uti?H^jd!Jo}>)j=9u-Pb-XJDp6tc(Vu!+VsG2;%vEyC3rJZ1cV%ZC4 z=QVAGOph%mcy-DHmGx`NEj>SX?)oRMU+?>TiM4Iy2)10^dT%B@hS7>lhW<^;Cq#co z>kpmtAl$4C;e;O)X{szl&6XxlL4^At?R~az#%-}F%hR}_1KEm(z#a33L#np+7{k_E zx?IpRpY#_vNv+5b*++g-$~W?D206A-GA7Iq+mjL2`bL+GyFc8v0mIKx-R}Nmu$3X4 zVpl=kd>QT8%u~w_qS(to;t*cKJ z?5`ljmD`3cAc$x;VhIxyjG0TAUU{5B#$-$vbcd`>C)QK^h@>I2cSnimIW1)CoqD?HbWWZ9aCBiG+}P#3N4G7C3_MxJA+Znle8F9oAtS%Io=2`!boLn% zs3AK{1rgD|$AZbR_YhQ<+$ojXvGkD`8yG!EY4T)*!5-YAHN%Wd@%3_$6WydVr@Q z;|5AK>&eRZUYT3dJI`<&r|{18osy5{s-lM@N2Y;LYPC62kd<0I{MfmQO17$j3pucM zlP;8=Gy>S^rhG2P9i1Y+Z#Zluif?`dp!rzc{o0AGCq2e8rI5Q4B$m_7ApyexZ;DZ< z;ej2)SExT1XTp0}2$Y2}6w8-d_d=gu_Fk~y1!>zsTmOxk#EAIBE!Zb?C*vJN6m*zNM!nJcy ze*M^Ubj*%Q>jWbWZz&y!+D7BBEgkN{gG2`19uXnZq#01e@mrTW=o_}zRQ534oXq%W ze5~altC|+l-nsPaB!5A+3ug^Y9uA%!e_D@;PB~~1nu{N>_fr64aPh<#GK}mqsGIbZ zSp!Hdcxdibp3)4SXD3cdYP!iMnWiMs;@ENMKq@XXNCJh<=8JA=|7UBGk8M!Sfmw&+ zv6<=JrG<%!ep=BzyhWpTFa8ued-WoAd%4~3Ew0lL+4E=GH}h*11M9cq$6c^Tl0iV0 z9l!QUBs+O3d-6PS&C@ilEYRxFA0GR`8}XN**EY4wF$|aV5RQXT8&f$D7!+<$`d)3- zQJhzW1P~veey;6ZE0l6qJ`k8pRFE3aGI`R;5y*G{y3GfVHIy)zTZ8|xc+c7k00ad_ zv5}B0%#wSq?A;qHOp+HD(6^wOLp7=%axls8{XSR@oS3@y%0l6SKKzd=Ffq~7b?t_A z8;`E-?OKbwKGsD`c;2OhTuPjOanr(T*A7*Y@>C0>WpE%~T%mxP1o=I}DA^3Eh{@7v ziQec@98aMjdFX_VWMtFngbe4Wf;-Yg7hDfuLX=A$AtirwOz?N=Z7*_#8N|fHsca;c zS?HW{{Ht6-j%Hh2VqehhuDuxAuu*mJiHpr_ikZ|7RO8W`10^LsgGF4BVVn~I6A1G- z8i%|=_cJSj(6yA*baAw?;s_?0227>g{Rw$(h0_tmpL~L*siHWpA-OSDWK1STmN$)w zCfj3z`xePM+F5b8v&7`Z{*1XzzMk}ShKG^na>Pxb!Qn48CB`;l6RMI7i9_bmfuvn> zP>8zH=ku&|-o@0*|1wD6$pUS3Cz6{}`M(md(NK^O&rNgM{n*(^I6$C~ab4zOiB z97ZIwE{F5**1O*>QshmeB8bYa%dL*uihh))!L6s0JUNHW&g}|yrD+wlm{bcZ8jbo+ z6h5OeSj(u5z#oG;p8KdTT|Be%V5vMi$6HnyA`I-ir!_?CdpBam5OOigZDQ#zMcRFS zZUd6HOv;gvWVetP3(1(q@g+ICY&~Qx2K{5LKmi4?lQorcbpwzKZ`7qhrNQ6vSy3SsDUL~OZ!PeBb`g)k(aF}0=pps$JZ9? zQ_N&@cFKk96%6qf&TgpM=-wLMT;$iq>~cXPZ%|5AeT@em*7@Yze~1nS$^;rW?b^|0HnLMD@sYZNr8%mDaNgLWPZ};in}-!ElIf zb&w4r6BI|faMyb0r4y?hNX4&WY~6#Zf$oazI2jY0NRxkzIEl(b@t*iVq=wq;$Q9+P z28W2CEL~+45rIRV-SDohyC;V(A0OJqG&neKu7{D8zQ7e8gibJr`|L$K!f=vnA>c24 zxWU?zx>C|eCf9y#Z^cwvR)&w=sf*N2wN`^8(xM3={&2O7tKu|1a_z=-NBzRz7bgx3 zJc+agqY7~_!6NHhoGFNIAan~x-(wM?*s_tm6cd-*^OJ+iE}fKnX@d;2Li-~mv3?iZ zh$`%Q`I}fBsZk^^8s4(I5!~$R>Vy`cMKAj0zrRh!bs0>RzbFRYf{ERvP95X-TNpD8 zi%PuR3iIuXK$Q7wkKs<40IR!B#;~Sj4LV|{K>sk8$%Jf%7r+=<$9M@$;Cz5nr-*Jc zNaT?Fl}b!$II3mZD;Q2kM(vg_PSj$_C}6)4DSS(-@L#x01lIgkl*kpExs|ILD=)l?3!Yu2ns+Y9NN8u zMt+=kBFWUwg}RkdGUiH^g_*^Q1Yn{%j)(w16{+0>Z@yQjqKD0MLR1YD9f}#DiG2u~ zicN)UprqqF?FeSMIrTB_qRo z*Q_l_ggE-$wPx+gBNK>1Pawt`E8!oY$V9$P!<4IS0of3j{hy6p?y8y17r20>y-X8$ zCF13qCoXV}pm@OBy4(i*(#yN%X+G4ki9M5{B&QbBT?6yePB;@6^!KdwjbG3oZ{CR( zXC^^3CVh8$(ilNkT+q+88bu&S@!WP9i(|%fPl8N?w3Iqglp6~akr*>W&E|Al%^rzN zrGhAQq{)*AoWsNMySd!2g(k&*^I4AizIg>w?E3omLf1w%b6>1~i2;zCXslfed?TCb zWc2STc3(5leZ}O&q4Q?CCl1Zb^zGG0>${&CJe}xUkY1{pCBuzuL(eJ&NF4s;& zT4KAY)-oHTUSs4mps4&0aM|^s++7!d#WibldnT^kv^OTSi2S4FLvf{q6X3Q|F!Tbi z&YS4if{Pm=^yKL&p<{950dBZwzKy1X*#3#To_ufDCWLWwo23x{T)UR4A?8c>7JLOv zTYL9(mh}b^FGr`W$*n(r>SX0a6NwTlC+hOATzALaI%8)~zAD03tTf%&da;?2b3EGs z`k(?HxZ<=zq*BXZa>La#nDM7^2|G7dT~$8jF`tqQX0Z&^aQ9sS{ZJZ9?pcq(Gz<4h z8H{0VI)4ZYlO7!%7?VjhyTK1D`Gt&pPik_KPXq_x1`OJ0wvU+MfN;#Xw#9>SldyiV zOo`A`F#d9_aZH*bNbpHFKv}}YSFn4e#ku{;@`3B8UcP&}j1P4}){M;zYE~}3mf7Zm znW?Z#tg5^ngXe@Jrgaz1Su*6~98@7XH;Atgl@LxyxT~G`w&`4H5R<;UNlp)cZ}R2j zgN;_HvtFw;gLkDWqpVyOyKuHIC+;HeGYJaQeX?(HI?61D;(g}u_zjewrqNWC^yDoxXm<>i01MIa~E_@zS1QA$`c=rzFSm9yL!a_U~7CaDJ# z#~{*8*29Wn6tc~zdEUYl+k1$mS#b4sLr89thTjMYECjN-%%DrgyEACm3s+cI>~CEKX` zDn#;^_`*OMuh?Q=!+k|JLv(UWt&<&xhAw6)Mw#>+UhQyU@dSlyMj@%%mticllM$9O zwPnf3-PaXLD)B*qR1buFLnG0OyPIo>>&2l%Qzd+3v{qf_&0JfH=$vT=R7J9g!5ZE8 z(q;QwyV~|Wdn0D{t`sc@d7CIqboJ$SS1X5eg*~wF_*O&?7q$Ao_Z>z^Ldb&qB9<_5 zhZqDgFGjH=XV>^=>J`oz_~?YKPs6B`cIB!Kos2;n|5!PQXo@qu*m~8*&P7tU>TJLm zWiVA_VbwYQ1&YnoOC{_>AfA#d9snMi&A>JxA16&I9?m1-N5Dpa3-R^Y{gcErsgapj z9au+tGHOR)hcVz3YeHF#{cuS70p=F-owk#2is;{CDo>g(Ziex5Uw#<6J+(jFAXK)f zK^BM3{@SgVNla2|@N_a>A&O| z8aE%-3OcFW*izcJIIDN)I-(PumtVf6afaCw8ndYEvvAuoWmRIO)v18}ZPESX*lVI3 zF$9CXRzCT^GLbnW+N>?&gEUzqOE!w;@#$p@mkiZ_CF3jE1Z;0kx&BD{Ptt7Me}W5R zvomBEbhv1U80td)-kxS%7pK{a`bhkj)Cf-w@7by0#;(#7O=cY*ua2Cd!V0%vl3Y}9 zUtzvEi4=Fno;?JT62MKo5J52?)TTVw9XfKH?VgG!Pc@ye+gMeuT7! zEoOdF93LWoM)!R8bZ&cJxev&I&F7gI*4Q4a)9I{k;zM9{#S zgoIsx`D(cQ&!otZ3-(9qMJ!h$bTNLJvU1Vkfhi7~(zFw$5H_s!xEO>V4+Dv2Ga8}K z?i=au$LSe-yvi;4NH>G%Y}&}^?#C&HIwG+YHYgbhcANwJ$Pvp>a>u-(1z{OwY#@ZC zqQU$+>K*7Tq8hXB*guSc8&~)4*!(BAj&9XPDM9a+P5< zXYlnDY~Io$ivT+0MvqTkzJUIBYuL%YX2HnV&`wt4-{0XQCt{28gb8DE9NTin$;-qF<|zCi}* zr9(I`1zRrS^df;FqIlQk5~9j=f)l*(Y&sjbn^sDEpEzX}IYk=lh|34hxld;>EG@Y~ z*orhdH&3DG@x0&HLRhGX-D7@F3USlJ*in_wZXhNBWL%wBY6x*fCCXS&VsR$B&tUZ` z#GilxA4sT__tlGayzc23!@_N@*<5JgE=br_w29rJQoW~EpY0Wj=8-@e_5;2tV}v-w-Fs!0sFLwYjRmtyuKepo!v5Ym#W~#O}3@+ zwx&KchZ8O6MjE_(&)PV&W-ns)W)PuCMqRL=ExKYHFf`cSg4kzMyusOmqw72XU#q%9 z7=;eHlp=T&c>y2Rl@xHyGO-tZeY;1-k?=OK0~^6 zONJ&#hc3QkcywqBN^F&~#tYK47b_A+RA&452^+?~uPHBNwuJ}>+TcEcO0s23j2pPG z-k2c4n)D=axX62E3v~F7y9xg#o>?d^vODSTGD_8hd$04kT{sR25|A6jkMTIM`R{Wv zwG(!H8hRD%mhbbgJUKD%b6`6KI=2=8CMVI5ntkJ_g9j$!>9rt^>yB!bbLl^hv@DsJq z@13dD@WTk%qa$eVUYn)=aPEY2qOb_k>BrnkH}`Qhg8cwDTgMh@CRUdmf?~4Jv!W9D z!w+_>OgN}Z`-NKmQ6Zd<`uYZU@7y`Ci=$cf1L|o0koi9WG2#LV>Mdmia+$HcVc%yeDq9G?owM@y4BWHGHs_^nnG))lGUe>aF_M-N(ro>mLP zk-!lt6CQ3$kyO~|fzBbw62QDk1)0VPFTBRVUi{$n6Gz}=xK-x_&4$2@8)i4WsI&b2sK(1W|q+)7T z7*66-z1biuCNH8?BN&y|K|b0g-lU5_VRXhb&hu{a7GKsTUX_m9-{T1rDhiUsv3iqL zFhiO~8e?hbpoB#6g)7&u{=h9YOlEn?5a{?@H4cBqRE^kYn7$~zPA5Q4qTs2l>#fC^ zM*3#20#~625eo!P6%C7Pas~sjN%ox+KaCAsb(7e-FU0#OkY{l0m3bjg{Nf&IDkO7yvEEyZt(fZeqY#Hu57-WcEiX&2Y2-J~~^>(nv zcIzZP>gKW)adDPn(P=-j(Glu+yZ$*`NJNU!$x%u=QtFFXSx6Bu;)@>kzEfDjLUIrZ zC&rk%sOWbgo54aMS2YlQ@}KvmhiPjv%xi9CfkSw{m$XmtMPTNQFxiKhhrF*2`icLE z04Ckh(vT{5>q))6Br)(JPALM62j3uikk#Fo8gWKSzPlo79M?P46;07>P{Yxc>qnj< zHvserq={7Q?y#@;sM#NVP@i7c5hWb@f6SM?Vm-E6>b;T&%T~_aK7CmV%vfFX9vG00cAe zx$G&PxL~HtF$g^xP$}+9%(g)&(vEmY(4c56xu$5NqSmNy(xTtCW#dgosX}MB4;cyxavhZFu)m zu`h`L-Aj@A_Im)}eje+(Ksb!#cXZ%RNXCefG{|FrVf@}l*|aLc_4v;xzD}tPgqXv} z<(hlIXYQ*aKCLjEW?+rvQvsGyi*be=ALa(R1*SL%5TSXU(PGI>S=PGPBg9LrmtvDz z(0iPUWU(8Tm8-Dyo7fQwqO|pqHAA#PO|caai_A;~&r6Dl_z*Uh*+9F4L*dC_=kUT* zSZf-n#%{Awzm8FS_l4tfm4SQ=w2pkOiqL!%uVmlzW6{jbfui^iAqQyPUQr-3-$Hbh z*v4eM6J)N*=y2XJZ$h#^B2OaN7@5*i6tn%^3aLyvhArAe!rCB0LT$lRYM# zW$B$ci{%y)(cZKQk;57fGgw6@198Ho4f;09K-c=|4b$lM%j4Kvqky@g9*f#wPj{qP z$J7AFK;sF{xy*NWS8Lt42BpmSiX<9v_pZAiH7xLe0&wAHp(V`7;C!17_Jn2p`U4E& zY$K-gzP^AZR~xoL_XACkBF(HVQYa7HA2q&5BAcQgly_-@`98zw8*&*C`>>kdk1M~VEX;p1DyeN}l;ee5D5uVDAI|tF8c1I( zd=#Lv4s|qkD>ZUQrFAJ}ohT)ANSQ)sJ27VK4r_EDn1bSj$`!N{6>zGR=z-RBh1CC{ zDNCwAYpR^IM5T3Z&_!Ix7oBKP6ZR@i(1|&6Tl_ZnXbD~#R?8D3wHge5%-tJtZsP>+ z?r8B!i}>-AC>AXhCkA-2Q1rWXK{qiia~pXC_w+GrvK+)w86PQ&vwQp-%B}Z*w@OS0 zHdJ?K{qM2n;R^Dk;}odCFLja035Br3NE&cuTerki4Ky=O4{)infzxau>SL&q=v}@RhMk1)IMHI9Y0ZbVv%|;-?bc1#=bV zfJ&{7qz3T_(la_5LqIi_0cr1#MSc_i0D%K4u)EfcHVu z*2pa`kS~Uoty zLN)M9yXo4{aV1A#W++!7Shl8H5cEsrfPB0COH3kMD9|TA)}6{|Rlq2O#FE8h2pu%P z2oWde-r2AuQwwVFcZ20RE_mW9H{RBu3>=N^!@JT7a3^r4(oL=8y^dI(OI!kmwxLy* zf|8iOG&?2Uw2mUiPlNq5kw7&0>~tGFN?qcFAUeg98aG#WcDj04OsA20>xZ!jz z!DBwdZo~9+L;;uE#yms;vGVjS4te7cq&tOyTttYGVGU?EJ|L}O)die1>_9@di?{Y+ zU<7VWD;uFkmm=91+ofz(Au=lN91?q7!>#OW$Iw9}eqddBfGS{=gBQB5dZOOyh?5uu z3x=zb4sEUbGj0Vt%@y1#CUH1Li8+ZdjTm zHO^#ajdFpHSHh88ES;=d<@PN7A(C_5;IY}=fBM*V2I2v1dbaMKTB5MfOvb&nK@{7D zGp-KvTP2Pm_B&=XcVkGRbGZiA>Cd@y+PRlHSI<3@0UJ$@?5J3s?tUzenH_9H6RMwR z2TKDVorqy_0UZVqxR1e;72`Zsh$h5#3s+flFK0n#FZD|YtP&vLH4yDFcu&dM8dP@k zq~I|-B<-79*Yrc0*FZ*Wh`oVCFxTNv?{vk-y`pz(LyWL`5flfXNQlsJPtp&1_&w&I zH1GiuiS9GxzKZ!_(G-jOwip1EJGb~EA%1LZ$`^Zl+>8;U*bQdBLAU=nj{F^j85ve| z!9rZFFzo~XE*+UESZ7Q1~8nx zi4L?N=k`Whi8|tuYY%qjJtH^6SITn1bu{$xknR3yD0c9e_bm`=0XqzJf_t1<9E^vCLx zbySykG63`l*b4P{Y;1TtODivj>Nq(|U?4W^WfmyaWmzd!p@8-7JoE~^LP`7g2)?=Z zFlFd7^d>ISEmkh7)zQG<9F8dF+t(N@RVt&kgOD4q3v@A%LLNfTCF%h?%5hrbppuOS zGT}n%Er%>a#cI}C4A~%>?$+HVTU;WGFm=+Xx(mRS+qt_ZtTF_hiJIK8`jAnXb{$^ z_G&f8F{!c$tmcUswPn~eHRal*yI3gl6IM0)InVM&iGH1AMO5rlw=Qa9{D@O>aA?-F z0goC3aI<0G7-9DoFkvkt$)jmsXuOCIVd4B{_$0!w2W*}#==^6yO|sI7~BVNtS0)*MVx9{fE~@ z;F3_FvZKMQiGG2`Cof=wfG{;ePB%FqvXTckkWA<0lOu-JgyJ5=5I7<_$VB zoh3W=gPLxS0MYJ|6W*d2E6roXBPYPtRKcH1g{zM<GM}AADd~Dv1n*kC{da8?Bv7e3)Y$6JarpgT}rn z6!$hnIV7xZ$mBaPoPfmBvKIE(YkvO7nIxH|ob7?L6uB@VpLE-F9woY{P&m1cIu!*^ z5_i%jm!d<~DMEuYbo<@6R*YcjHB(FW6X>S9IFj1bjDo+qprm9qPu5DSDHK76NJC+R z{+1PY%IC8cKa?RRuvTq}&+G1vNYEi&lU)rh;r{u|T0*Q_z{y9fvP-$i#Qad}Y!N3e zQ9|fiKKsnCB*mC8xo38ve1DR&BWC8=NeTbpq*iiw8RwpM42*BxJ-X926R{DvZRm0t z0HUZ8cOo8LTW511B2aqts@DZ34`wW@TSzK~LBxh-8I7M9gGh@xOx)nH0pnZ%{*r3Z z%*UaqX~hNVVelq@J|=#1jp6Pvn4$6y7UQjSGEJ*<5Ot+~tkpcDh=Gv}tj_daEqBYB zzbQ+WYZ%-jSj{%$jWk|Ga3@Q_|JFNX>8MadQt$s6Mj5^(pK`vWu_#x=M4>>aK9+<& z@SD{$s%*ef?d5`2B-cQwFOr^IYG0j=i?5x$HoA7jwF{lymO(flVz)kMHB;UTK{!TB z{6qjkqak62BNbWGz?zPFHK>u^<1bM+uEUGXMOX~XX$~1Dx_Dp;>(m4uzqC~0htX#& zQQZGhQ7D)26<=N@*JXYzFLNy>QEE`(*pN|ztB#iwbBcBk{y&NGRI8K~e>JxV_&ZHzvbB&2aI<7*?hR?PL8%;X5)#@=Jc zU7yf7Z(GF|i0bh4Vf%KX5>c&obm>85`e~6d4)~-!#>p+mma*^rNc#ngi;ZCYG_bD< zjLxZvp3p%_9J5*JCeK0QiaI}W|0d>rkbtXXqYh9FTS>Yh?Pya(S_4JmD-o+5qcv*d zbn#1C{#IyVs~v%Q(!j2pUOrhZ`R3T;R-z-jEkegU4g|1{2H%t7R9|Gk#v6t;OJmV) zehJt=!8}#DpU1rLgppm=CHHh;kN5sA$ue^%i!51WsenyT#qFgpRbg2X9x#E(OM-p( zaN=n=KI#5+jzXeTcBU&UNllzxPtIK$4^tmIOg;6}n>t1l%(c|N-BQbDAfdPY?1Skl znt;@ZIV7pajz~^$saM8x;w2K?=bTV7>qf7$>-(I%sdUIIHXq7sn+ijxEI(F4BA~0D ztH~Ws4L_x|$>7ukjQnh+wy($!0_A7%k7$*9l}LBwshq=T$IbJaon5LK%|ih z5Eb&c@E+H8u?^nP6TC{au^Tt((JJPCiP{`dTLx@(jHiVYvZm`*cPGyg_qU+Mn5YX>Zc&wY9BX zGSKX-{}~vkzPu&7(VdFPGmjZl44)_gQGtJ)8(|%*3mt15+_bxpyj;@|fg^eIhee#O#;eR>Z;pagtRw>VRynl-S?&m5RXS>V4cZ>Xk>Jny)GIKZY zv*=FK@at~27Hm8N2CrcAw?zw}Jpfx|Eh{VjaWSygf&VMZ$b0xG{t(;^9?f2skl$w<8($XMc?mEQ_ z5Tau2#Oh!jjIvw=s=P%F$od_U;JDPYIjrbPx{!d#t=u|PMV{9hW0rZRB7D=X)U4qM zchR}oUU751ItH{aR?+9`;e+B7+#mPIgH+kW#AMn1-1H7_6`3a7)lgB2lmrJm4{`&g z;wD4@GDewAlXfJ0Nh_F5bZ&Le9xh_!d7quOJve>C7)eQwk}*?dRhmB3Ekbwg$)`mw zeS^g6qd7u`Cg9DK8g5>U%AW_Tu(T$RgC1BYLLyHMNNvQ0sA-rrkGVISygJ=qS5Uo0zm5pG^$VRWft|Bi)AfxXTkiqf8kz9>J{^D6m_pg zpl06R_D+A^qhg-hlS(N1tWC0)u%w^mniCJ>J64;9ixi<1Xi8`Gtx~Vr@LQEY661F4 z&^0z(-BsHS-==GxYbfhY4Bc#W$B^m+&Bo!-nv(>G3KsR(o$#odECiFPxn`Cl!UN^z zKty4}pVjt29jx59dMdI)qYJ84^QdsZ4vUm*ZmVu$KuR+m{w@BUsoew&4{3e+QVAnu z>TZ_uICw+N1Gv_Xse#WvDz(x6<=#C*Kpm_FS6K(uoRu~k=5ZOZbDtY4etC59^77#A zh#GbkNyifsN<|O0gNC zPi!MZ4XNH>^YJ;hu8rh?<^`;+dNo`|+!^!JT?u6>6xD)~yJw~U$k*)6T}q;|XZtR2 z#whYO1ef&n0N4C6mB`=VBYSXis628oNTZ>1OEgX@SpPt0P6(ZJccgQe{fSJ-^6ho& zaqd|06jY?JI@QU7nbpH_@?uJC|GT3T;KM)q@9Fq-s(;A^W&i3HHsd~^K0H#@kTeg0 zX*9%N+EX@F?@bSz=YrldKK%Vs&WRxC%X#e;RHgeewzFXw?z(7aL1dKou8mXqRQ`U+ zGx=eYHcnT?3;BOh|A&9O;VG|4^BW|+*k6db_={~vvbB0fJ#7Ylf31r@T`LBMa%#8& zOmOUM-&jiiLL8uWytbC~L7Q0iP?~gdPU9jXKNnUaGJBeEi;?x??sAt;6zGC}t+7$r_?c!Ny8R4YiDoVFfYad!tKZlrN3dsxK?>9P3SGraWmH-4OQfYF~Ph#x1HCo5REUmhJFU3}0( z`P>rjpl6nqe2C`hJuwVcft~bMI1gGs_z|9uJuqSXo?=D{Agf`B^B0btoB{|^lLM*OVrk&1th2b>O_JbDCiAjFg>!l<~V1| z{#&(-<9tiaaz*Pv89_W@14QHjKrKL*Upd@@og}0I=L=gfqlTAKz5s0)yVDrYrU%l} zF7}fjwtf7o)QYQWu1ki0K+Hy`T6u{FvUG;?S!x+UU1<$AQEP@>NlJCM8X7QD3SRqE zGb{GF#SRrH&4z|;Gd2^rtHTOc4NeJe%}FaI2a>T$dRKcAtH|h3C+FO+B&c<=_Q%Nw z&Q$vzOv-Og%{PO4fY7gvwY8m19R8H#e0%-b_q&>D#-gLseW%#<&MPVwLX60Cz&(&+ z-rT#Iq)|Tt$^m2tXPUPG%&|VfP6md33g9TEs#A~H9fv8fEJ9kV7WM1QKh!BIK;3&a z{C>dZza&q=WPJLAN|i-vw9Mq%Fha4oGb_L|>l}U{+!dL(BcwmR(0}e>lCW4sErT-= z<2+Gbo@45^$)mb=Ag#l0t`}7h%3t@(-9-Us$sZ1zC3}R#hJ2<{PoUF(kQ+$+Gz&H*m@VT`p_2JhY z2Kk&ChWm_r;$tSHtLS5AW1cUcrV|N+ zm3Pz)_sQoY_U6+}s&owds3}pPv$0p*WXc!du(-)L_+P7hWHDAhA*eIad$V6zZSPeI zee3UU)gpQO_D`;xN+qf( zTdT?B3l9%78^^On-F~f+^^zN`*wS z%U8r?7HF_Iy>ekkcAg=eo7sEdeLxvn&kim>ax$DH)yMkCUc%hGa&cTD=)!=d{x9k6R;19q2^bE> zqC3Tx{ijn6_e0&}#K1UmqFl#^9;+ZW;A-kH57(RtKu22V*7_&Kjf`m~SleG}KB1XM zmc^rJD>Ej50^E7eX9gKBf8}R8J_ZcDC2%l*Z6>I6zcI#5G)kW8~EW=C@vw+ay^kj_l zRj~!13O+IFO(rJm&OhD6K)F6Qflxe}NEgz%=gKLuvo5I1tQ}2TcwBE;B4SN-=%!HV z&`+kS#wlIKuB#?W9fgRIO?<(b6?h-R!8nl2Zx`pA`c;5*J! zwTZea!8Hk{6S@i*)uF6S?y+i_bj@vke^*bf63MsGD3`K$gZeGbX0RVRfTo46DBrce zFSXYn(M{HRe?%WiTmBJUw6*M2XAO!}AgH5s;XJ;!rbsl?)8h#DqUL(OwnnK=*VODL zUB2I$KVETRFW60{t*$Of)`4mvi{6m=c5C7sT2{9*RDCvpbK~pmrsO&qJN{{AG>1+n z3uT*78=&iSw@IOUn#?X$v!zZE@7)>vi~AQ1O`9L)fI_R?n>o~q4WoRobj&EZ&)k@W zdp>S@Vfd%P6;6|@gXg$@|0Q`!)m>r#B3EVAq@Yt53{zrb2a>FKrGr(vL<%Kra(?T* z{dyo)UV9x)7QFBDCC9oQ zZOt;m>Sui=$yCz0qjLuJ5q#98xhB1#+y_oB6`~*~W%*8vJF;Mj@qis#9c=zImUHsj z;Oxy=MVrn@7|1Vkg*AK*J9wXueORvC?Vx@fj8OlhPCz0PE#h?*th+wUN8b?-nXqep zDTTm4YKb*A|Jv*9{kpYSou1;hbiGPi>`*uT$C9hwxj4n@0`>@_dFk!=_mH;D^-({v z|6=-Kj*5S;JQ8nznth5hD;rrXBj{zP&{&ZS_W(%0zZ601JpR}3CNNz5gp1Q@kT1y6 zBlqtH=*;&-oBX9&PusUb!Bw?<1%{iUvKd^whut}UjfGS-7DfjI^U7MPIKDfgApQ$I zA`})=XuSz^Fe!I_Yvgam+*cUh1zGs9=5n@Nu#JvKEdA7MNFs zvBZG?eA`oPLk-9Ucj72t9s6Gf+i?Lf$Nf8Yze7nxM${p1xQ+C|Q%8heNCX{<|R`f>4FL`y^ zNi)_=$IWK52uH@!OK+9IZ|>niV_T7#l zL=gI4$KJGk!PC+8tmM_n#RCt%OPR`f<{`^P^rAb33qwGB*_$ncHWuC2f7D5!QeJlq zU}buObFt3N`~-qX3+Kq2?p^iGAv0?>%y40ss_;q4+RYP^OT84M!Zf8pj!rL0?*Y$t zizWSlD_iy(EtdGg-9Y68+dvR&|xp@NfU&YusD?S-cAWr^zZT!kk9q47YdIp-F3B zH-A*S1`gWR-LfrXX*EcR$TiogUGW|Ppdk(UA!~KeAz5k^h+X?${-n*ra9b|Ae8b)_ zHU0pYOeBvne9^4F9*tIqKe`<=rYW^U1@U5*1TJIn)*TnGD@Q%&;F+WQgHck$aKo!@ z`rmMUXV;_6b zu->-2m#=XX!pt4{c&J-z3{GnrPxp#C!;S9Z+j?Ff?#-%lb}G6_r8*zyq1- zW!fUY!cof1-jiA=&t`7N57L~K)`&nOX{+TGHd9WP%i}}KuD%O=oPe$+L)-SHCa|%&k_2Kj!=`d}Ii+_eG2~RvgAhJh6 zd1pt&+L4{a9HNv7=7)`4ez`w5GTq#1S&Tu-Ezkj%MJJ_x22|2GwX8db6B4_4sGyRv zbwK4j-x=&jFGz}A**-dW3*Zlr$a1F4C1uFkh-5!lL!^BW9~hR8+lCg?>06tU&@mu* z)r?kT`&w*P4>q@{y|?~s^TC=~l~*XskS;^pLfjv_hXX|O#t683GRp=wkQpaZO|J;h zu`0B;DU&4{mpB=BTpI`u&IB`XV({%o52BvpBEQh29(WF<#b(vLdd51yt~EVLksKh) z0^n$Zn{Ljmq`1$e7ud9$*-gL5Ab)y;Hc5HMrV^DvX(_jGq%}nhu!kC?Ajv`W%2pe_ zD~liZE*$btJ*?RxQ+Y5o-I_~Qq)~l;DsOIGAl5_g5T)Pm97GNzi~Y0}6kjF-;?%Ms z4Pc|-cgfa-cG;_<#l0btqtjJeyq$(rJ%o7=&W~nq<$2+)p_{Lc$0V&1F@4FBC^9?l zUe4RenXZ2l0Eo;g18qenLzlt?@rs7(>~W&nUL|4 z>UQ9{l(c6Ze2lR!OKI80&3L=aKdcV6Ud37BHhoV@6EK_UosUnX3j+&CMpoqwUQ!Dl z)Ld?ir%)ol*ey4UXBsF9CuEG85Q*0!7gti+in}lM(Z&Q(Q4?96@*KswX1Y&Mc2nD& zIVf^+Deg4FR!%R@r&dQarV;lvUqC}A$MV79drKI0UQELCBX`*9YhdT@RE*l)#3){j zRsTx?OwJV!Uc^Lx%(?y2>TtOxOQEqOQoEy-_G{R)4Cq1HAY%Y8?L2<1m68GiW`;)^%T-thct}~IfHWs`fsymEYXu*0hEV=a?zHoP@8V=>rOH3> zwJyVvGoSiXPGNAjmeB3hU}xhFzb?iY4~}th%2eurZw?B^@hQjDnKN zqVc!8@#cwgA{h_5znmM*f$SosmDK6X`j*NeTG|PB_(9$0Amv)K!s?;IR0l zOFYh^Qwr1NJH9-UWStdxZiu&MmSHBb^q@&3GRS(n&GU0CGsCamQ>%_GzOVDBI$ITD za1U^NRSPci3l5g)XL)t-pyc87P3$-gD@G1J;5}KtQ}>l0U56J(Cv#=CiAwc%qxp7q z%mSW6QI~latk|+GK)hIezG7I5E0))99c<^*&S7-WGBE8}HNnE6GwLINAjkrk}#XJ4;<@Sy;RwQf+Rj=jt3P zT>`r7HWpS*Okk<6G4)eGxVJ%Kjk_CU{;T`721pETZ;RN%9w>J5KlIfDw1P!NJK`8~ zM(yOIgNhV2aHdem0?Fx}NIj8~fQ2|-SfGLqP@u@78lRvnfjVS#fl#^3ni~8Nw`_i% zF@vTA+8BB~mnPF=xScA#zj z0iL*Q#St^PqV{mhX=U-u_iH=Y)g9^(7B78wz9-_4hjye@z#GPUtieE@2|{G5#Z zA8R+G9^KR3XZt%(pFYb4>9(HiK3jkENKkc16^B%SG~{*^VY>Cv9oIE!_f@Ig8XwKO z2uSXE3FPw8#n7Fhk)~{ES)#?{d~MAcu8iKkQ*>9gw{qFeLpkDdqzc9>G}Yb!@M0JB z*ZMoFvEMzmv^O1abB#JKEJ3Vn^W*RM+(q7k@?0Vknd>6+HgULkhc|>5`0ms7r%ZLd z)FnF5U8?Z(^&Fj^NR%P+XgKYNUzfLp^N-+`$bXRK8o{A3eEn@I1Ous{`k8Pi0Hqr8 z=a*J_P^f;-2v{zXmhIy4L?|eqgg4_^kh9cHB605h^jRVn;SbEP5^CerD|zrpw=h)t zXlAz~h3g5aAKhNU^}wEwXKxLmm3ss=3mmW|97l1L#5Kv+?hb1bllh5B2$Gh1w2H6f zox$qt-RbJ;?Ezk5h@Kz5Nm55;3jgyR(%5r|wb%E5#7QaG#U;-|OyWqHtTJgx1?}TG zP@bHTf%cxAbQhx0#^~T5ohr|!XFlea;Se+PzyrOvCl96ykh1UrbX- zw|@(+M((lv8%4^5B1>GG_OZs~4~-}M`|Q@MS&FcIkkk^^^hzJ7;f7g*dD4=Xw zZOHlogqpkGpA)T+A|s^3@Z z1Q?y?F-t8Kh;{De;zhiJSZ&)gQ&@(L)+1}+5Ih?xMb%S-e$e zdIk5N%6#Ky`r<$C?9G1s)i?hJw{%3zqQrpV-=RwG?upasY}B~is*DA`>kiIL$?O#2|v2 z69-v9p);^;zOs2N;jiAdqL8bTD4^WJ99H3+sDr*UPGh_M#z|9~q&WtMPU`79I6@Y0 z5>%pFusgU&MGM!eI?2)`IG*t)ttG3s61|Bd3jA{0JdQ2(&DplAeCQ%KS-CHkI$kjT zn=^6qzmfvKzHt4DX2vN5NQ{(pK%?2*S+n9JS3&>?CG1Ylow2xRmY#y^Y?IBXT0rAV zU&pujSZ$;P{v)GK0!LHRRqZHmOMD37AwIA@Gu}P;aHh9hi3b8)HhMWFG>h=E()2e5 z#RYshX55_5GN#StJc(jHs!AhtD)#|u371rZ*>zSPs;@knQKdx=@U0pcl)zc0@U)`f zd(0r|7A2(X^TGD_+qnscyon`>i)4u)!cAt7zO57a!zAp*jd5N}F#*}Vr_cui3P?9cnVo7?L<>-@=6zX;BzXWCpk_PM*zm5huj$K3Gj;Pm2n ze+D5?K3~n|aDr3l`DAo~r`YW4FRbQE*=n@A_1)H!XJvlZ+h#{Lxz(p>tLo7)_KLjm z>F<}&ZCs4L_>C2t@yVNxdVf-}K@KSb zA`T%n@AS>L7L^i&OGGXSWN|yErYsv;bdX~kGRkOAm_AxCOA;Lefl{gBTkKP>ve%Xq zh9qvxnUtX0j=I$#Vpn24SxpLfhtAOuYOA=-5_w`C20lkN;Xa+9Q*G0Q4MQSx@Y7c5 z5-|Eukx|ZhXh%ibL;a9nTi4LkogX%LUJN&$KE`yhx#PAA9_?;DeKI7SKz)i0{QmtC zE)Z6DsPp@;xoEB$LDL9Pz6CA2k3f~C^N5=tn&;;V>E7Z3U!jx+MFPu1Dl{mkIYbMJ ztuJy&xi5R?S8iuM4H!6Mqyj^m2j*t+QSIOiDc^2dZruq-I}8MqQ3OZPbHcFeu!$c7XNP2cYKAkD% zE?Wi~ZJmu#WSOwn%(vYwyrJ878!aq6$!GGzILbeCHQ72n6533f@pAV4wnz9obXy^H z)?|l!?P5|{vAf1V8#Ni9FqsSdc)MYS2>0sw8CH$S-XGDRGlB48e?FaO}Yq9L1wB$aO?aPODKlhUTNiHfa zf)rCrM50D^9>h!cKK39(kr#9h#Du>hc_285<;tWwxqY_@%`+S|-B@}Uoh7rUzLhsL z&Iw2|^{zAs1p?0?PcN}+OM+nin3qpxau=0YgvePaKT#)`MdY zPeS**{?Z~tVzNytQ~^H;VabPkv?brWw%e57GsSbKDt245I5>T?)doifi_KQs!)#xL zKN6ebtThe1#;=PXsRxrY0#pa$QEw3WKqObDd}SE4mm=BN#vXS z6$~#}rG2@}uaj}u$T|TeqAFmfv22=7;Y<$8x=}w6G!0Udd_s!0T-@I3Bg_D~2N3Jc z5oxWSpC5lKqayPhSqgC2e!sHu2QW8e=lz{f87v(!pat#OHVJD@nXk?DZ__ae&1Icn zC#j)g(~CXJibCW^@;|(uU2EUAL$7E%R>%Rx07$HU>*ot`3D z9KEAppJ+*j^R*Ts_dee$ogc@D`2&lLecF-bMo}9YFC3u*sst|0eTLJmxexK!mwygy z^Qh}SU0XByV~sQRO+2fj;hxrIN@wDqWOCIoFAPm7kfv%zKYd6Bl&%y0{j+D=qRBsf zxHg2h^_6XCCmvQk4zBA0-~asbtGl%a{vE3m+jCXhI6bq$@#NJ7o4qO}`~K$BM;d!~GVw|iTu|sD zJl@|4TtP(4TZQi{RWnoF3do{e48p+3YT1 zX1KOf6dDg?`dd9Y{2$}9qm^oq6-Mxq-z$bmv&v6yNMu24+wwD;;_%1F7}f7~B^0<7 zQnM?2+j5w>54uN{cIH zD1|tV&`F2-dC8tumNCkC_h2!%zS1N{LdVl}n)}zh+ed?&+8T`&| z-o+Wr6Cxf$2K8%AWc%`^M9A7SI#-+FALglRjS_NbIZ7R>i9FyZ7?MIBCL_(~H7w7` zb4cdkO3o%PlKU(yW^04K?sVeIj~uN!HFv6!?@za>I^E)@CFzBE%{Nc1Ls< z|LzR9lag>~8547NEBE8i$tX(*#yt5xnd@RkUN>mYl%uTZj@g~K%cWQ~SMDthZDh|= z8IxEV#uWT%nhz<+#ohW%MF&H?=Bj%=_pGaZcJV>A%qsq@4_MU)}9^8TW$|h_r#{_z|7JE1EW~wzaxg=jP%1$uR)N z(Naa;PdYy_Hi_<0z==TJOLL0JBMDhyfs?mTZ64vRIX-@mf)hhp)>~KPnCtai^pi2X z^CXE_suOA}Ktla{T%l0m>hW7*6S=6T5gsmgBRJ5A3oPcF>2&T}z%Z(eD5aS0gXy{K z#m65A9fZo5x3_0wi-U0m^h_?1Lg=Cu<7GgFPRoY=jJj0e0rz{ZNE5CzIjOaV^kZ-XB`8*kO8I&6wOo)KzipW&JP96=wh(D`{?eo zN5){wXo4iOI(R0~n_h>wbZoY|)u0U$33mBm62NTm?(+B)k8f72{vMA{SGG=9xNuh< zA01M;XfVE@;@I0+8K)`K>|g$8mRm^?a9bK~j8JX2_H+ zsZudG-sqe+^$($q0H>8+rnuWP*VMrhxzoB}X}WX^*x+EIw1J(nsbuGK^iff2&u{b& zsJ#&7f!OX_;wySE4}l-uJlN>YNmYhK9q;_{^V5VC$5X{5%hyC4)?j0Oa6tJG5*pd# zS6Dz+2jaP{41tbmYPlD4-a{fX`MQLD*O@hX>@M{esPjza;}qoqdL$>Xhg>Ij{1jxDScOHrVPqhqYVewX=||*+cusN^tJgO}aD?VYQ~USDaQ0^WU45d(%fE`bRSH@olbX;d&7TRT zac_HkmR=XwG2D`3PXZ088Un}p;-?RyWG7Q{TYV6MYd>+t9#gROAVgrY<$N%rmMKmv zJSMS@&RsN-&uob@gLE;G-!tI0=FzEZ5jUdjTHIQi*%ibw6SU2h=b~88Qd9(_lN_u0fr_=`MgU!pMmJ8S_=KaU5f*_i&6D( zJb8Op1da>o;_hFM&R*i+boYzZd#m^8=n4#lBMyC$NLq!Sx@4|IwHx;RPlEcs^#2^3 zzZObgiP7DJ^gG+yZVhiG)P>+}o`A#@zmdrpZVQgKsTPJ!`6-lpFUPZ^18Hjm1Dqm< z8rj8^0G6u_eeUbF?DdE3e?p zk!LE3sv=@cPLx5@cz&9S2fL|U$1t6N)(vNJ$;W6S6P?bApJ$>G(#NykZzFeQ0g+Fj zeJpzGRX>*8;w`(rVKx1KEi?mn9LaXz+FhGpZH6xbize0^$-4$HduYO#-^d?_ebUw4 z9QCA)-gm|GJR~fd!OI0hdlOuoi;7ZJ-BLU-oK1~e){o59=A)pNGJv?NCw%M+!gN7x zg%|ZPRu5XbT~UFPqf=A(K9s`v>%kZIzWnXrSN4yq9!8LXSG@Q)WSqDAQY-J9TGB+=gn^mF0MNI`U(8E{gzKWqNX#aYBm$9mx+p9+?Z{n|9)YKW%LIx_0 zF7{SO;)pDax&~yVtPAZ;#|!?XfdkJ0@48KVzax>6mXswW4^>Fdck5W>IG zGy&4zudSh}PLD@Dvo~I2a*Vq`_e+T{XaERo}O{OX`Kk z19G2z#Dc1Rb#Gj6J$!q`asn{63mq^bQwbWouu;tL!&|vDM?CCN{)dXF8E-7L3D^9| z;PR{vv_STRoaFh+EOR&BH?1ea`!J8pm&OXDBSvMmQbGmB%we0)%F5zt{NKQ^V* zBYS1;)7sLct;?nr7i_(Q7dd73kJA2iw;leQ3p|tk80+79HP09XCZ^HD%qJtW@$fNM zs77n98&r%sog6EBLyCiP6X9RF_Qgv3#ug!MwPs5vmFLPj(5RA35B#R2W&itzJVZg%y=R3^(Cc zyp>_Mj|M&rgJ@G7h07%=8)Gt*MiF@YS6zcyq|dOKXxPu9rA8pWvY1;Sc{;GxxT@$9 zqtz$orlQoN#;D9WF?(5k!UUvm)oWYx8Vz8qW2IrmYtN1$LgSaGZc{3#d35n`ed|#^ z*E(K)){^xOuzp#Rr?P`EY~AnnnP~O%MFwty1Pi?i5QT*@!$8N1vnb~Q4O%w7v`_^WzY zS<{e0z?zP0I~fC+g=2+44u>JPeY~H`?^yC9HL!HNa$5Kc(M*Gtl=|~)l` z`}t*i9QH@9grgyfp6UC2M48MuPp~iMACL}= znllZ+*?({pnVS4$VH~Td>?KQ5P|obK z?a6w({b*O>p)paKb^G-AN3F?4Uv9uJyNb&s{G9!S8`LTe!ylUOjQwd2HsOvb_|AZh zC5^MUdSdY=e(S8k88J)tGTo)iQVy7YC(mA5ffJWLSC`Wz4My6RT*J!|f+=?qH2AoS zAc6tA0SIJ95b-A~q}OuuusUD<{nAT(!YLaWv$1=uXEu6QnO;BfY}9#cHgPZZ%*WsU zVl(pYTXVA8wr56q_lwO(owsJwxSf0EWvvEel1SHheUdWrk&Oa(TwHQrl04s}&4o}c ziW1;HY*PFJXlHY2t>f~P=ZBMF&jN@z#lL4iT4k%9d0xOE1WF%vAB*)vH+fOx1O~-~ z=czHJMAha(6yicxAwGXu>pWWWN^VTz>%r4kuUJSYgY9fw{cO!H(eoXh_N_5quev`Q z?rY%}uu2H;#YB#XdEF2KUb;uvr&zPdMH*i0_Gr_iJj_RP@B$)7D*l&87j$^=yVc*Ueks_zIeJYt}@pr#kR2@ z^3555yQ2LIqi*7(I~Hi*<$b}a7t{r3=1UwGPboJMNPB{>h|03LS${h+kR$ed+xDo~k|To~=P*A+BZfPCJy*+Dal=g*7v*~qUo*48Fn2R@v z*9ELue9&xa0KPeb**JkSm8%6FHJ*Dg+#vCwIh~Q%1uqFXOGr^`rSiJ>VC&T&H8ANt zYP~o^*2`?bX&5&c^Q_L!&!+gm^9o?Xjv6}@%Kt(m5`0i4T?Oxz`2Pm?l^z@a6+e18 zuy|kbU`dpyKyB<7j|&0hAAW2b!(aQpG5Mxi(ok5VXLXd3o2WCq;kGQL%8ZNBoo|vZ z7=N1MDPcbye5cet2|*}Ri6h4gWvV~Sq#*W zbK+2FeVzuxy|JZLn#n+xqE~xJ(N5;4S({K>?6i>_uh&)r0arFtaP^UsS#t~vw z|DNc&ZoX)7sI-<-zps~j?`fD*+;Hut_6s^#xO7GTwzv$SfhPByK&?qQ(mm&l(<)^p zXK@y9cm1!;oOgmXc5pVCqD{oT)?KV2lP53%7rIX-hp(xkrepz*KyALDsT^68zBV5I z;0h~5J=AUde=HlsL&V=rJ!Xw4q#=){FBXLgz2*q;5encXV-q9=;oO9+>bf1QZeAq(m93 zj8aVmYzo*h>7=gcoOMg-QC>Zv2U&zzcP`<2($HeukuRz}Z4!(u#PKv(0_ZsBmx{%1 zi!q&6n^iTX6*O2GdXi~_LsI)Vxu|@W1Fbw3Ba}7S+bS3jAMdMgpiJRqWdA5@qq&)6 zJ8nv(!)cQJA?^O&N2J;LwE1N${m7@NgDwDgMezrhCujKN5&Wd8M4pGm_~BMTage)} z!^{HhQsOH!1J+Vp(YM^F~-*KFZhxVuz0^}$@6h3A(t0ZA*Dz6}ky<(3I=2n&-jfrp886n|E{hzhEp_Z?38 zkL{z+FV*9Y(zJT0mbks_?%cDBnm>LUKGg1c%w^>?&+jpgKzU1ImGBX0YXdW83qEpLmY*GC6OM7IU|I2-(B zWhKGlFWsPmJ-%dkdGyVL({s+}`u4`9DA@sJI|vhB-QN7D}Bnv8of}U^k8Sd^jozBL2?--=7rN-fSc6VS7mr!r*nv z9GX@wGFrf4;LwB$Z1wf3jINlg5Ml~0FLf|l8jjCjlcsCQW|JPTt!?e@ukY-v|9S9t zpJ(+ZkGM2U55>m8?kSkg?O8qz&o1Ds#mY+12Q`Tb<}g5F!_v)$3i$P<#I4zI$=MXs zx&DJ$j9bk8K`IGVT)F8kj7yDHULMN5Ejq45+iJU9N+Om(mUq-$9_UVf@5+%gN;4q5 z_paBVh_@akeKMiYyfvZ}dpsJSjgotr5&`Lo2)E^B(gKZ)_}oSS{uzprz-zwA z0#>>%(vS;U0yD%)6uMBQpq5#QAI8aD2;kWIYTB14B2WI)D7uoicZA<}SQq zJ;V`73jr*#i(YI?-AOZ6Nn)$@%?Wnb_=oGi_T!my) z97QQ=yD!zaQ=2#E0(YwS*d?J$dtf%6SiQ*Fco5!gx>SMA0FN2uOLoQqkpQ(M!$K2S zmQ7QNq8gw`P>lJ*9H+&i*@$!w9aVjZ!N#Ml!6h*)sIQ>(4*25_+(W#>nr%_tOK6_? zWE{>eweIga3w2k7Qrkp3GlFlgKl>hy3(-E~bEZ)HM)vxHwLJiEKHK|>S)JeCTR%H{ zK&;>1&U8%p+-qq;eaYy){zOS4&}B);c~=2vcm1Qg%B7fF!4my6@TAbn%8XIKCK73) z8AVDWV$>(Iw-?hhO9P7w8;-n4$``!!?+?D)-+21u;nsKi z!aEraP`-`v3D;Vi(@|bRT3h?U&xuh{SS#Ybk z8*@n|1VGs>|F$>#_0PIbLa5rO-mMcU&tWQJ%qKZ`pt{qeJ4KS@uvxo{?3Z2S_7`RM zEDma@ax~mD>e1ro{4>A6B2kRqktT*95H$^FsffOCo}t$8D{mJUP|DOV0JYUhT;jmM z6(TGsCuQ?87m2IPWkS56-Ap-bw1k{h5M(HkB8Dz3wr z4{2jGN!tqMD5Y9)VYn+Xc@>V80Fj-0`5MpQWBzZ-|Gnh@#`=BxoAm$oUTSBDJ-d5n z@P*0BnJMBdqjNQEmI{SPp(5G1rj{=H-Y`xNhR6Cs=K z>u@_U zgpzgJ{-vF(v;dsuz~m8h5{lyE@RwN>L@?~jqz=}?G%t~X?^Cz_vSmEtBGo$6C&p?_ z#^w*J=k-N*4~HMvdkvLW&^;6uo`IUy$K#Id7^8~?dlu7_#=`K#{1dbf>Q(GmK(cGE zmWl=XUM0RD?HQ#Za06xI>+>V6TC}|5A!gre#FdrQ->N>dWr;}($mMQ|rSVnzW&r*~ zZ^W{xH+8UD2%g=@E@2Q|*bVpqVj)3ZE|(C7%>qg`yT49$^ukoYogue;cyW2IY-uVH zl60rmligPhAui)G7l*ilTx!>J7*&{MT%PDH;tR3@PY#HipWuco=!x0N;F905AtM={ z(+6h5NW(EbXH_a$KhfAQ&1@%gi%r-I2%4-}s4H@BVs7GxS{nbt1y4T6Lq>|2$<$)= zC&YCDB%W8SlEYk`=`ZzCe^;w}N+5b|$YKsQe!R@1`F&}eSG;m5!Go8z`mPJm`7_*O zSMK|QwgWC{@QNkG2+^V^I3FdBv3M=yMRIR|sc_n};9d`=ts#Xk#=gsFM*MCIO>*A! zn5{UfShV(ssB}3ZnGv_1QaxgcJ|jHYcJCTP4OfGkG=ynGLg|B2MPbl09BwntS_Ywx z_l6Vs5*aEiU)bGTP;(iTE-DUW=w=(K>gs#iiv$UH?56ha`?xOR=Tiu^1vMwnE~rL8 z+hDPKd8P_eMl(FmO=$F@J;@63v_By2i_#d~YCR>bO}#&B{rsFH1&L^=TNyIT+1cLt zc(u>d?Dcit@95w&kKNfviW_+vF>-@Hquk#Q>yNe`tUue_hY}m&2L8nvj(%)>1BWD- z%>Nd)#+<2t=z4Z#-FBuPU@{5QXQd$i=t1P|TjNW7QaH_mW)RrbK(_sI4d zH)G;}jO6)+X-th$tazH6*mX-_;JDOIzR_X=giLg8vXr(XW4tJdydOO7lU;N5b81^) zL|8=3NV4R2vaqcoF^%H3P8}FsNmmg!3HQuWy3uQGj9W4C`PjWV`aCbJhrAf;zwg`p z+)OVFTsx5Y?T4&82!7Dsw9n1W?8FJedsPj|9r9=$;{&^=n(+4inzLIiiF!IyV^*;xAD_E$l+NlqhCK*Zr8`qs2R{q5sBPOkoE?mEbfs{c1v z=7uSy?%s+-9cQZboUZUf;Fm{B2t&Aug#B?w%_4hs4;+=OKa!?kM%Hsx*_=mr}8@m^*p% zR?e*S;O$P>CFyV8M2am*Y+x~&&Tb>dd0wwgLy_-h(wr1y1|5|~Cc1V1TDhti4P~V$ z1eD9`8}JxS}gwH_y;VtS9f@zp2^b7f4;yvA!5{@PX zY(;P^i8_X%IJU!taE9y&v0y&U>kz^L3-0W+OR>&0??X!2x~j!4d-==ucT8nX&3;ScwO zIa|3tR&B?#x5mxufScRT19J`$3xkKn36*u+lO7j{7uh55!=xxP_aiFNNDAFGgOpA( zi5x_8o?lE3%e0V5uVhIa6WqeBf6>KD#Z9J6EbwG7MMPnl+OH#usGnOgdG>)+N5^vU z@D~2c%XjmvHECkA9y&(TU4V(Uxg~t@sOlFKM;yMJ>RlD?~*7w$CBlgjmxw4rNXc#=et~49>X&l z=61<3qr4jQ?Jsy``Sr*keq2pa8}0$sZM5LkX4CGw$mIHc#TDjr>FdDnTTKdFF7H5} z`I7TOmM$1R(X@xSxew8%dJf@~`M`xjOlb1)qJ=RjLA-4R07GDaY8YEEsoI`p5h88O4G4l^&i?!s&+WIP;h!eQEP-?A-t|5c&?uOY96BTU z;^phFUy`@<_pe@mZH!kUh%7xVPOd(w(r-zdtp#BO^0y1l+WgyIUs4^)sDXUIFJHg$ zB7(Az+Ht3`f!9?bKB-l~It_U1;JxgYndmLA%In)Mkk4+JMxYa^joWqN6pbp+YI>xL z^s#xC0sQb#!X0V!V!ZO#A8(Idtgrl^Ki>X({OkYttJ~(Jw72)g-rjFk_V&Kq+xsoB zvL1_`5uQ_-#`MZ=tVja0zq`3Zrp_0`?6LS@^WpmQN6$zz`Q*XV9T-w0+-Z?lw>Ls= z)(U+C4a>;`gBgMHyol1-t8#{H4$*$!-{oh`Wjtp+Pu3rAHapGpt{Pmk*SS5y9P0k+ zTsFjYKg70utv9%ffN1+|cTe2Fpnci~`?on_#-@%v&xz}8^9|iB1t#ur{~>g`xAL$1 zt1CbL`fmB-mN__TEJK1KfFkU&$Xx?9 z>i3g#%L9Uy+3RhmU?uAVc}zxLvJD-QP>1Y&JfLCrSBXZpB2M+%pj<_5Nkry^aFJmd ztlRqO;SZ`#NNRe5ijrc=06qH3*@pXfztZpfw+sF)uda&YAhjEWBj3^^)yloZ2SWPj zksm^KQyU?Drt?YBq_PWYpo#~&)`odsI<`08G3(=>YReL5>(B%=M1v_{-LYQVn%D}Y z=cgeF3yK9%Bv7Q%CwDU3klj@}TIlVi3WL;tRQ|>Pk|WkE2KV zwrBFi_gX{olf^dh$2BP3OA76Zo#Dl3|N8T1-&eHXzu&i`z&)2qY3s^JpY;)aQNLB& zlDJhGJsagO8ddn;B=fDIHy@K9KauF@c5*^tD1oGZ#_`$Q30pUPT~||%W_iwW+Z9Xn ztlOU2x}2ilu>OSU<_h1R&jw$8KD)2IFM6qd*@&5($#Sj5O0M86mh&4Gk!5lo6JNqU2%By98P~(?TwD4 zDj`V)wVRdcoor#HYcc{OD#i*szjY#0-@2r-uSTg+on}AfelE0$%?{Fb&bh3bpX5Uj zncREL1TTEAog6H7TP2sU7_+ckEJJhS-dbKAJSNJ-a*Vaj8A~^@XE@`Kkjn=uv84%v z9=xeGAM9&>V@Mg7hZ#5z&X2yGO)rN=!h)GM6}{oB5% zLQCJhz^uYgIM?FuTZI47)&>dpGrwPS-%s`PH^NgX$%?On8{}Sp6t<_@>57&e5Q#TE zK#8}4OZ;hj-6_T*b`Ibwh{ZRdRaQj2mJZQiqI^d#4aMV9Rx1I_md1-ztUWypMxp5? zk*q8suJgpTyjo~WDG7awkGeN5X`)$FYG|5oT8Bp4b;IeUT?PT_n$9$@sZ^Ck@2SVo zZ77NKIVWhcQ&Y8@ZV50?Eqs?h;%lbH9TS?Tf<;VIuUgtTwmnI2w+MjW)wU@ESz7HI z0r~-@!#b~zn6RnK1#bo@Ab`XjzXj?IFh8;GZt8iJxf@b zJ_yDbwUaX=mUOq?8OpsNS=YNO9X3jniFCX=$aiBHm0edSL;uq757RfNgWVG)^8D(5 z@%O(?Jb}4lPw$8H+!aOywK|Nu2eYQuqOC|?uCDAx*I~LxDT-&4@%h16OHi?l+!*3SjuqJz z+{wqMdA^Y=_~!UfHT+EhKTn{xbyQ3l~AB#=Wy zNS}vIIrp3yfDogiodzum0@^`b!p1YhUM`$tvEev`2{p}JsQE3W2m>x~(@$vnaC#p2 z8ZH2QTN}mCV-2L8u=JJZnHSU36k<9o8ueXA|7xR=BtA5_fh52z4WFBvNpux{B-v5k z!XH}B^R;`pm=pSvj#)SoCpY{5Y=|~@A{IVGV8e5S%vlRSQ*52%qsL5lELw_I_b#u! z%%j=yO~=~%vPWr8-LIDo6xI2`{nh+gzYPtO26k*${HfAy3d9f^#LYY!?iy{hea$LP zsI%({>_%|U4?mc7%6sPFNCJ@vW`upmN8SSz{ovxUZYj;(rO$&mQ`p^tl$6dNX-JEx zlB1PbS?>?9_mKZFPLWRRt?|n-CfZYr@=_r`O(9Nj*%pVH)G!n)-jJG6x}iq3j@ymd zShJLf8nA?PPBH?OgSoFh=`VLyaQ-OjBjDo=V`eqM7Y_gKi}@2PJr3&_iKLT2)?D3{ABKVWaGE zEjorJk7P~3RpGnDlGB7s16^YZ3978VNmcRM5UoW~AYDIhjY-40RGg9>?EL6pRJJx>3-kAikzS0D%5E1uhORVLEke=T zl7%ID70r{X%WzGIP%_4U`;WcZuPWYnZ}%=NFt$fhTj*&l`2ODRuW#S}hNf;0%1f=b z;<2S_!s!znDvo^2A>J03kl)+75ou2Ftv0Xve>sq``iQdUOeege|X2lnT zNF)!`l}TFRr@4iuGXS>O%`l@WT2oxl_Sj*e^BnldaVJnj&I0Kp zfE8EvU z@tA=aIy{+G*N+yDZe*%K*AhLwAxl_I9X2o~lH`~4d!Qn^IyhD1Og!3XWGE1O5!q>? zUwvekMmk`rmG#!)&E!((x)~-w#Y&!!4*XgPc=sy+bO1YrN$-EBR2Es6HMV?aal2`% zV5g5trzP8Lez%K=MM;&^5_s%Im(Y`jnY~DVxy<9_$Q+4dcK$q0$M8p6_M)&x6#K4n z_zDTo6#Pabd}-LWHY|a%HaYd&cx9vFoT&&Zpe0VY8CYe^FnxWCwt@5FZ9Q^-BtH

of^`@3s0FG4r;#gDe}*6ziZ^{sBqzlH{lcjel|%{Bhl zaVF>|dzJull^I}Qv}Rt}71Opv)HdLq!M!_!6*6$KSyiv9*~%9}Cst`Az?F24z@pN?C;$SLR_${J z?}kxb!E5SS-4h`WB~PD(@I%H2pOrJgW%j`Mgfa1*>aw+pWdEiE!_szFw{JB7$#SK2 zHe|1*WiZc%w4g=~1c0xI=svgMmRXY1rMtndMnY!z*=~Zh9^H&33d|MbL-KbjWKpdz zZt;BxG_A+#SFJRh?g34)bD-b>SjOXq!97%Yq72rRWrM90x<#zHJ>&}LpqIr=10mY* zYYp6~z0JB+Da=Kolq3)A#VJaGmjZSJ?n^}sA$ck#d+X!dYhoXlp z&*iawoe8u6{5RZC_EEteN&{Sf8eEp-59KRhFBI&se@MwT!YA~-m+H=E*SbvBxg z-8OaeVi>0GGCHTW@VPCuSWadDsRn}j9hPFK(~;y>xI*{axo^-2@mu_J1&* zKvn1Nj%l%t`Cq+!&?|^pGOQLD?(rE!D3341dauws;gJe1NsS9E?`~{FzS;so#?_UD zbp6hO{Y$M6w9^U7X}B~cr~3tN*rGmWB3hQf-4+5hUZH>Jb-YcSQ{}n}+f236n3eR0 z>mC{^gWvD;Egn&P!*_4Nf8xO$zn8YR5mF3(@X>4&^| zc@3hi`;s#FxrWOcBiWXomt3#IQnM#gw;MYPZJ_Q9(rtrzr~FF4auZY2tcGH{%W z3K;rkh9Q+Mc4^c@U0T=hK!;nwE{@;HpgxDUN)U?M*cpbbPVz)Vyu0`yfdqLNU3(Xa zwsNP4CdA$CxK8E=Z5d8ubC3_yt0x*%IHQh}T53LOpBoGJPGlFLE*0!!_AOxtudh_%~g8R3yP51YCQ^r3+3h*=R*L<{-|@Qd>DOV`#6*JNvL)sRDP0D39IaUh#P>)VZ<8C}1aWE>F3nx0v8 zub#0y8_Y`d!9BGAI38@G{@ox&=7Y6?JQL`~vo$${kiL6|!}ekITM3T58th&^wfdyU zGtjx2Ma{QGJJ%_9M3UzRz~lIROl?+y;(YoVs>pn8I#Y*4if{ti>4lm_{ zQ-5-D)`?1XqfrL8QQnea{~_gUi>1z~Y+JNi02OpnKcdKOryk?#W42|vECxwel1Qd$ z?(x~6tnL5g0A8$Q9B7cm6o@+-CL~FynBG*m@KgG$>P?Z24kT4fu1*7Sxg4=~gwErZ zAe(x+=hN)KP|w%yz6(gsuSuT5#T&{e9;Z(dYjAaPEMtyRz73rSNj*|k`Zbq3toRf0 zE~rSD-z7e-c!cGw9+o{%);=)}a4+gAkq^Wseg#422Lz2iu=Kw?w-R#RxCp!$K!0Qd zvV&=2m^7bMT=pb}`a$Q61nib3N@l{y~@KW$jdG^w&#&nE@njtDty{12tR|%F{ zGOrF!F|PbR^}cfrg`=?(R@3fxy6c*NKlXYyh3YQhPl0o8m1+1aq^vb5aEqR-N@AH; zPHAtfzzulqRTq~NtTMJ0Y3R!4%S|*)CqS+s?eq@#SR2|0=3p`Z=HDJ}-Zz$keieIM zHa1kIosD=n(n7$F&W#BeSt6#~jqTopU=xZg$AXmc5Zl2y^i}6goP~93(-Rfigtp1i zNmn(K%a3|Xb_WE6+BSLqjibiyr8V1Rt?LK598jk~~hvHK?bI=8{o8Fc;cSn`$&SrqtJ%>pAtz2H+BlIvX9fS0>)HrkN za$hm|t`gm8|DvAG`G=ic7^+5*l7yIQyr4Lf@D|3;TGPa&rl!70zL)5jY|H#t6x{I! z+THZpb~=^#S)i(QG^Kp>dKP2)PFf|kaMt`o*1T&ee`kFkc}8HBy7Vt30PVVib{7bs zib)bkUkEkDD;E>A#Bh2Roo*~rirdFm{q3?RtHkZEoUhx?38-?E2*;w0_npimbLME< z9o+t+p!jhk`MEdxA>;10Ol6Cd^mAN5;W+S$Q>AhLgZ34<#o=H_B zUAa#&G=)Y9$zLFTGxxvk3}q@#mRXlZv&zojUyQ7s-y3R2miWn@r!m`mCa8JG{cX3z zB)D#{F`0$F5&BIjx2r|=f8cl3ygH_jJVJREz?Fo6K7BS&xP3fBE8f8&Iz{f)B}RlY zC(N<9$Z$e%iixp>5^X>lLOg)eM^X>e1D10ySdT1rB#IX-wNziOnB&46zT!UyWrtM~ zrBe!DTA&O>iKo%TUirnkHn;!=(o%}SRzLdPDY|lU!~k6_nnC`A62yRbR1RW!mqN>Q z1c|-~ms0KLXUr~OV-mgzAzbyx;}5e?1ei>bm68EZt*U^jNjP!8)4m4bUr-=8n9G_4 z7f~H;Zrg>~qqI2oz-i$x&mWzu{8f|P3F=~Qs05#*R?@TeTt8{R_4?**MA5SCrBxQ+z4(Bi)=-C$&^_xaUb0R8(n6{g z;(9?T(&KNZ=Qw0jQrBl?=@blS#=#Sb2zDEHA+P< z4?0&qJa#;8H_r=?!~x||`U5xQLzGtd&wFa*G`PHcysOUBNz`3!db!a8bIWauiQzR` zWjFD0%O~2WVpGCYv{w2=Au+(tPqGQWiX3=;8nx57F`YsUmhl521H$fvik;ljrj~0q zvLq`+Op3usw(;y|*x`-PNxZ9DBeRGy<%^(iI|>xf11Z4UmzM``C%U8p!%Qs~3`h1j zaKnBLGve}q(+67F8{-jjoTzT|OCLpNJVve>_+2!T8^sw}g(TSfbd?vs%xV~4ra;Lw z$Lj3m!FA$8({^;a?+Z%<+Xz{skvcIq!OyN}922O9k(;QkJ_9i>v*zuX7M=Aw_})cltKve&NS!rzhmlY`vshjl%kUU`6@Zehgny}Y5Q}r_SW=M32KOP$}4)<6x1Y3eT<+6uVDSo5!A*O zCn_OdQBjT91&%y2HBw$c_#^ny<%P3p==@GVm7#@ z7i(*U>1o@^jMVl_m14FRtAnTKSe0}k@hF)}$9Sn8A08+d?C4ik%-N5jEtG1&x#rUq zcJ>TB7>4;)Qf*WCCIl&T$VttedKrwwH!C(*f?M`zc!^|;mQCI>+&8r6h?*G)z?-w} zUuJavmrfBCo0OQD`KDBxo2*wI+iL@KZ61<+mzM{XRp2fe@29RUS7x9+V(^r^{_SX;&y(osnm18li4K z1Ls3DvrnxQ=~GwaX|V)p?S$3;OX(EJMshy=>4PEhU$j085fKIxn)w&%f3wdAc&-S= z56#(#KWC^lt;G8)OTlh{T7R;;HxPs;Iwso6%zwE(mhsttr9K2auT3U%55%_*g zPLrW{^flq#4-zB!!81+UNvu;XH~P*XcOo+)d8_JB>*R#q|A0I+eP2m*gVFz8@7G=E zC9MSyToFts2~MUUq;il`zUtZ1fQ7n)z18KS6zOFA7D{_?fRH92F_YQkgbwfEz{b>G zpCfEJCS$+EMfKENx{faB>SWB~PT#4l<>3AF{H;y@&C%;O$Nb;LeR4c~b+`IS+`?7! zw=01C^%;~%tBu$AY_D7b(!7o?FjRY?brjPuFCF^DkFY>v9nQQcNf?D&I42KRR(vB( zKroA-I6Y~_KkLv&h;q6x9x)#U};g^(fVygf%*dhhma?K2Migb=#Fw2m<7# zppLSUx#J@NwP$8QBFlbPh^R8UIcH{0#Yc+4N_4K?Me(BS#w_xJUXUQ;5UaVTZsV4;P;7t#FegBm2BGAo(Z&*Y70UU@Qm;`kVr5x8bH4Lv)bIg8w6kB?^CqDC7| zq(+jIqWiQ%|M~ptQ(MA3B|d9-bMz9wuUJP-i(iqnc*`33U&oQFtMmyBhMuKrTc+rj zR4AxB*JdpLkbZpZ#LTT9A7MMldY<=hKCIx*k}Yi=h5!;;p&U%tt9TtVlk3K>djpw^ z@k?CWUstS3W+F?4ISThHmE%lImr-zxP{?pt%1qE4XPUfdqszL%l$zbHvbauaL{->LKT@uQzwvx|4<9Qh9 z0t3xL*WJP!cAD^{ZR#@-M)c}6~2+Jq&fwBg7Tj>%&@&za7-G)4us%W;I z3=7lUc1>ys{sMPHUr>)*^kUY!s~2u==&JsR8KIlumQnqe_fB@100>?s?qma`XsR40 z6uWQ`5___LX13WC+v!3$s)5B%MPaOpV}AJ8z}%-8PTIZe?Y^cXVyA8t?W=nYLuH zka$|ioE^6!5=+_G)b#s=NsP!9k*cvlgmW8{oKRxQS#e$}k0q;V`p_Fn!b�Na4Y- zi4<#&GF_@MQWfS~^KVG6zvTu-2jW?i8VNnB&&>8ijZZfz={aAdaZ5&Wl*h8AsPcm* z&=wWV2}1GO1?yqq+VPvzF}KFY7tg$dF42CG9=iP)dSvQe+Ug?m$N5J0b&d)0S*VLU zE`rN*y`G>ToJ0GQ8@Z{6qv{wwdz@hIp%ul66n8jch*&#a<|5mNoEvKe_LWqeTnr(DeLd#ZU3#<|xq7 z-HYlJMG^v2Oz3krQlT!WM$4k9;<4jL@05kPKW5`tBq|c(>kNs9f5e(d#X>XAZ#B2( zcg&+%_ONOk2;Lf}7u75oql@tr2ddzm3Tb7(R~`0JR8 zyjYUYzdS$us9^o=D2trm^_4q*KgQNkVIsqt?7?L6X!A;qq*OwRnQucrx~Kua1D=5g zIm7cj&<0KbC1cAjl2~McKJ5S!Qz1(a>?#N1og6bzyp|xeghf3hC!cE9F@`qap6j`i z1D1?NIhj+9c#E`V{nmn`C(OJAOtB#CkR`OhSLYuSCE+yu z!NgqOfqmDl6m;HY5%Zl&OlkK$nBJBwYYIN_gKjJKJ5~$jDjp3xztW9qIa5C-;Guua zPa6NwKg`wP5SY{!4RVOR8r`aGUD&G=<6nC0C%{INPviUl+)V0rE~8(6@~1Zlk`Y-G zija7p-#j}XpDM@uy9r{W9Mi1yQ>UpT(~_08beMQ_7qmV$3c)-PuN9pkl`{cJ7ni{@ zTX0eiIxylGua$N7p56BiO0BGp+)f^{x1%d~d`t=oxLU+$>6-C(M5D~*BK{c~&c!26 zXL^40`skFl2kzSlw^N1vsp)<_KV%2fTih|uE^{%$StJXF&)hGX>&H&~lX%6L_D(0_ z=HUpnNR65*H(gBxO4!b~lEeIAj#4lhFCDQdIr zCkR8SJo*&Qf@Ym_Ts>-OhGWQ)c=av)X|LeQ{TuWD6cm+9fa*%^fb8jFCJtVo8 zr;yx&(Bfo+JO>{6V0@%>HIvoXs|YpIyDv#%hQd4kT>E16-s-*L!Poi0a%yc)mOIs5 z5<#!lZUN&2V)+(0M{HXn8LC@R33E=NrvFZe<5mUV`VpS?{|J42iV?heXK$1(B;V5u zpw545{IjCspIYM&fw8o47%4C#y91EC&dk*<$g8FB=sxWsG#KB8cK(K@3E5;8(dyS7 zI&U)H|710PB90cYvA`+XHezb^fzhnODT+xj|ImzGy~eT_3yTRZuZxf6?XNkO;;>fY zc3UJJ(k|^u5|nJHmLrHb8ra~whEd{&@r^`1oY(oG^Bzl5Pbq}{x7~zb?m9rOvd=!} z=r5izD9L1{$BT5mK`!KzVr(Eg`Y|lp($bc@TOLMgEBvXCUKLI=ce3}3+^J!&$f9$0 zVGe(=ff4J97PZnOd;T1E>Onb0?n*)s_)HmsXeEhOmYXHa(-@D8n~X)_jMF!pIF=IA zGS>zO+_BUqMtw99t1$_=&~PY8v2wk>#7&7zDsCUnPV4DZ@DlEvD#C3?r(dP$~|4~F^hzBo#pVFM%q)59M**JBuHEC9q9t7 z72nKB-=z^q%79Ab&uUxGXMgo5?=j^IlL8di8YO+(KZ|K%kpA+{Wwq#4W<1jyZjZAGFQ2TB(;%M{8D=V-)Sr!0iMNRCIDDIe z7QJPD&e4({8{23I#7{Z>=TMJ!Uk$})`hbMagx*)r#xWKkX`?ShRP#B5pHwz2V4^#O*pidbL%e z(Vlf0H4hANAxGqEgED=D*to9%yIiiV`pMSV4;fqi?{da|jMAa2d=-U}QsGvv4s&1_ zth3cu4*(i4+ui0GY|NxExN5Zc5Ut;-RqyQnI95@7Yv(fNs=EZL-u~1Y6~Wq@%2+oV zx^GQ&@yQDLk|-F|-x$KnD<2PwxN{AIeG?8nU4c@!c=kK(Q-_mArK&J+m*&a3MFlwg zw=wJ;Ss-MCyLK|L>lwp}yY7D*yKr(oY1}6QcRDk6r~D@whC_yMT{uL1QS&61D_Y)^ zgROm!`Sq8yz)4{AuTTw=n63AlLtYor8lJ7KerQ8?e=S3vCn5RgO|$m=N>i)*;JsBn zgxbZEpnH|+wFBf%ROgsobD!(S$2B|d6`i$ofoYPT(2g587-CQ_K4G^*PRbbNUp+Fd z*c>bjwHebEw@)9}u>jkpR9-)&_7PV)ydp6Xl75o>a_gj8ZaAxhJ_L!UuPF9@KZb zHWq-~NVWFN4>#tQLL9qd0kM5j4C3J81{t8e_nUe(Y=q`+&og-L*~P34^xyWgVJDB4 zMT2Jc$LAME$9vme6xieBk|)3~=0xG5kk53XL6TH^)hF{}#ljmPr9TChAi`l!v>3u< z<=lR2W`R8hUI}%sAXzG5y0%6!iv6u8yU*4iJ=))R{NPUW_0!#FbKmp%^X&(ev*`VL z&TBqqtT%8h9Hm{}+!O#)2Re4{ncCm=JzSXi*$EN7GqoH)GMV-jifEgl9gijY;K9EY#O2>fG49~D~Lx} zcNNBwr=zcyL50++&~%Yv+bE-+qOUifK3fv&$bH#yW^NvJ-J|X>_>~uSXs-0!5#7@# zXNUe$=TTw0gTy_$i{gPC(t2{b;bQ_NWTOr4uCL_Uk61z`=Q} ztUxsgCOxMPqG>nF{Y)>>f!TXHfi&d2{{?i?!i}MHT}}o$Oq-IY@;hdr$)K&%A)K7z ziJ%!JhQ3dQL3`V@{1LUjH5K}Dp0w=nqhKEfwBq_O&<8Ku1UXk zZdKfGCF?V&J}t4~?G@%my_q!9EyIC_x?bgA^q;_6R$PYB^Oh{IFa!U;AD5Z$^%}wC zY?@D#J3t7idfjI0oF)hD&0Y1e2+f*{(0fT+mCi`ZbEL;n)hl^ zA-@I z=IEX(mIS@4`TFTHnO=}n2XC`mX#XFF3t&=3fkH)ti|Jd+T-P3X#Ap2xz5>cpb|cM+ z`!9BCO?-v;97*mE7FQ`Pt_*2OXGnQMSH!wNx`$8rk0F%5Z3x{ymZu9v?_eKwsRhLC zsyE5;9lg~w8sl^Ft!eIfM4D44tZgh~VEvQ>q%$!ZI?z-9>G`~>kj1F}u|ilJuo_?b zjXvrgtquZ>{AUB?gO_BoL_H&*^ePLYquGa(SJTrE*=03p3VyLPlvvx7&zTM#v|5&k z?T$dMZqC@4>dLdD`zkQQfQ!wU($g~gd#1u|nWuM|GTh&cEOXd!OpPh#PVBmtMc^A8qT9+vFMVX;`JDYX!{@Q$kn<)$dXB>M!`5O)p~z)*o-eKF@3N@cE-h&o=-4neDB)eQPr3>QsIKqDNKD6sx^aEhy2MOn-2q9QY*p zSJP*Kg>)ExDny-IXd(FxzkHQp` zt>L3s9I(tV)_IBatIql4ryHjBZ!|SCm;B^rA5apVG~Vt`j$gT#!ydk9O%qx17C#h= zb7_3P^>lCRY2N27^?Kd$~1Dhs)c(3WOt4SmEb=bI(C`D)iBv6qbpxl4KBWG z=KfFI()slG_$9GQVsBK?%6?XNdji4ZRJ4zr7Ifi z@@$bfst58AA)185Iq^|0eSR7_{Z>6o)5-WP%!}ZVN=!3ToifF{q&eApQQhdR$P7My zg+1Qhrwu5w?{2I0{sDorK7kcERpbIbZ%p= zTMN08GXl>}@kltbnu>kgzgzwaiqteA5*~Iy2K)wfG>m|2oSZKOhFh>^K3^IizS^=| zDVWuGMxUmWr#U&F+mrbPOR8(5eeJkn@C>-zw9v0JS#ho*~3#R{~S zveRgRGoT6;`ijKTCI9%D*c!fPCTZn-&>Tshw$spMDnP>WbXbS!KmaY-68?Yo z-n1>MWLp>g&aX(>)XKCp0RcN!E$h&!lqd*@THUK#E20iMi(QDaEUNMZX$!)LJuVbr%qu6Poi6wl<)zY z{xG4iq_HYoLFtuN;4_gVn#;I32jX&SuH{1=Hww@-f(r(9hb$_I8!8&1;Bi;=g;ZO7 zDb0u`$T_2Aj4pBb?-W|facyF6Yh`n1WmD{V7uAm+rYRP~WS)Ny>=z@i8uR&hsAl~> zgrIXw!8A((e-;pYWLST7pFtlks z351C&I-%qs)FzH^-$OO25N?nK+Z%@mLSde)juRS~wxB+RB#TYETwV%8SjRPTKs-c& zC<`B9g0t70i6v@8A4NNG_LzRPdCVaiQ0-2@}*nacK$%uU!)vPV{{( zW$TgTsV_bR5#%H2Ql~sBlq{*d%%T*PYS)MfOZEuKPeC8G>Tm!4VY>dfQ9u0n+uZcG ziEr3+)7{9uZ|PU+KTfrr)(PGBh_i&<-jnxsV+w-_f^-zy%C?>_)bHv3#&g9Kxsj0; z+aGHrCy6PZ_%z44qf*CKWwk7sgb&-_%I4PU`YYky=|L1h+=m0MGdT2PJp`O!G)|eV zm9)knk+A#ObXI=oS8Djbb14Kh>v^6mCh?r30OxUXqaxO22~nm6X<19Q%;k#)ATy3W zMUBBqwbtklw2aYCs-$Y$jz!IRIKd_441nZl{9>|Fm935&S^=woMxh!LZegvn3D=({ zRGw#xXwC6FhKo(7e(2YK=>Gs&HN|)DjxnI6S4*aHb7gI1VQXcN0gvdXG7nO%?$s$l z3PHpCp&>E9{d+CY^uuqr!|&NyrSIy*JycB^HX1=Yx`Ag@LA}3F2p7}8-Q8{+VF*vb& zlrOQV-_i@_Tey=$CUu;an)EB#^yF@-0q!>;)ntVUk*t|UKdU|9(0FXxlWYi>zyGb+w| zr(N7})nrObxPto7%qmDekd~5C5^*v3o^X}d6`Yf@$<6h`F(C?2dHc|A7b44NG6%VT z%-U{N*3tjg)>`GF-N0}uk55MZW>UJkge_vnh_MjZMEck*2vh=sZR8r?Eye_dVTG7L zZa?Y4K+}=i26Rktv?V!xQ#%)!<{19Js_8$ND2<=NKbbm%Gn?!9Zb))rLq{>dBKs+l zen?Ufq))p%gR^E@*`DbzE+3Kqb-mI-IRq$3`j=fx6U0VIL@M`hsBWWD zD^C{|)|VEJ9xd?u($Ne2URmfYE(+zT^sg_wFJ`}NFF!mSd-`hW>*>2s@1_>o zt(j(f@aXlsh3VPzt={_fe&c25%lfO?<2P$_57)lV9^Knodhq_2m6toud(&Uvf1Ycd zzHN`SXIlqPSB}1}9elcT{_D&8?;d=9JDgen`gQK&?U&hK-goa!HKv}wZ>|sDK5osP zUT!_w8Ej22?EJED=gp&c(+gwAzjhYSo}Hf#o*%D2I^KBk{OIJD!O8ZUFH6U*?SuW# zow>_r&rcuyIa@N}+m)mc1vurmBSn0j<@@M>Z8>vV7J)7tTR zuhF{tG}n678GF?3o?O0s(SCP+(0jeM{o?tZ&FA-iSsJeIe0e=L`(Xc<%l)nX`MsUX z_UFUF#_M+L)t$lD&sTR=+RuOa(1qa)%)$`#o5ze`}?yCkKYV7+glqC8_%}750@X# zj6E7GJ-TzSdi3kT>cf-A7oRTHKR>_IeAsWUznQt(Sn6!Pe{lKq_`%H7(WCw4&YSbz z{Rf?2U)_85=<&15mvhazvEJ17n}>_9U$1`c|9Z60{=EL|-Nnwy>FUwK%l6K6dw6hk zINN)*xc2E&>($C7j(u!Dd;D~IY4G~a!(Y}e8!Ka%TPwqb;pW+$^UcrgM~j=C*Hh14 zyg67}xLjFSc>S+`=`vV(wVYc7$x6Wjyk?1o#Vc!Ud*RvEU%SYrciK}kFCH|`mv%lq ze9&3yES=7by?p&y z+t06h_dmVcKY9Ii@$%8ui_aU))8ny=g@>=s_g}WKSRY<)Of7WxFW$U+`RL2*;ky_6 zFPFF9&kTQ^TYuPpd1vGB+5Y+9#m3^Zwbr9wA2nzCZ#vuSWBcz0?;fo6KHZzWJlPy{ zANB`Rms9W0XJ{dtt_t7GYI^Ct0PgmE6a~CK57x$lk`Q^)(-mB?n>u1l-E_YskT3;W0Ik{|~ zylQs`zdqa8oO{vV`Sj>jXR){T?qT=Y@a0(N^~JM;c6)f|MR#eYH~V~fv3I`QTHI-_ zzx}fOb^HG2Tzhr;MR)D%)8m=*7oRWp-{0x(zuMTE+5dEBrg`+sSZ`-`=l(CBdRKEZ zuh*9rU(FsodUW~b-o}f=!TQ>#nU$sU*5&&L7oC;4hmTg<=k1l@!}2}kYIm^sZu#xy=jHb6?aQm-v!$!E`zxQ{zMffJetdsy^V!9t$BP@w zcV?E?I=@`?J4gMCoyMCREV5{+*#3zv5W7~J>6~l_-#f<(xx7PTHW8kwdn{@o*ZvX1 z7A$D8R$bp%c?CgdZ(;4(`W|%P*++8_x_+({yr-;fC9-D={5^uERdAE;&zkV(BL`v= z(Q6sgOM&pCO?$HaK28xJB?;vjNwx(+Lt9P+Bc>{I!-_~hS0cxVctrjKTkxQD1ak}0 z+)>sb8ag<0ELs7NqwY0v;D;wQ!-sIOUh)daqN?&>E?@cst|4s@VT^^NS`DF6@@m}^ zRo_veu+@Ym!rl^{iA@RSPyr%1CVXD;nsbI8yuCx*aJz>ou7xuAC=ySA;YN~XT8@M{ zt0^L(*klBgf<(&3t^_c-w#a~IaH)yd3~6+@kBd6#uu*df0wj2UE|Rd(wFN1WvSl*MfL9Y{ zs$Q$kb1}p*HB58$QbQAmvw7 zRuGiJ7>;_~jX`cm07Pca#4oH2(Qv{=%QQF;b{uDU0$a>d)`TV*wi1s<2CV8&uJ|pu zv(>cLtbaCP95@JK7Fp_1n2}`YlThnB0N2b}JeJmPLtDydf8Z=dj`_s&9R*k*s0aQK z*dCxzx?0OPd0o96PQlG8BUQ$YX!*HPhcQX-pfN@lBK;9LAy0nuhzn04B0;0k4~WOH zEd0_+;mUJeI0^k>uK)+O*`~vZ4kVxTNu0+2Wf&Jq;SX*EXP;pO z8I3;$PBL{>tvx&sApp#o9;`T6K|ZNmE2XhLc)C<8$Lo@uxCeFTc@q|*@-zs)GWziql5 zg#S|WO`yc=a4RVcm^hSDGTv*IBk&zk8`DEBHya7wDgJ@G;ydd!x8k)t;9=oS( z#@t@98_|X8^)NR0QGKI9z|~VSP+II04-%H6+5y8$AF+ozWIQEq0f+mSJOo}+Z8x(I zuq!ptM>|0I$OyJIMAvUhevrr$9ffRFseHA6d++oLItq)!HUjmoNV-55-o`h9Wo`tN zct-esCh6|+88PIO4|1&EBT~nhNTdpdDfT$10H*TtC5-c?F5FaLPD{47f7=~u8ogPt zAV(_$@OhA2=neuZ6u#|74=WAC%0McLa0A2v{5JMK4vryTN!G=r3h59>;?Lk4O)q4_ z;w>a;rNWF0w4sblaz+_2sGBU09MF5Au`;`=u0#-_jWM`fFaqd>$ama!lDgR*6blh9_u#wO(2M+ZWmie>dt{_B=r<&aD?@?n0!h#NzB~(X>&DV zd{3oB+P^I_NUD+@mOkW>Kf2XOFdpO`#lBm23})i=aeTV;6fpY7_+He=Md*a$5m$F( zhBa#Z*o2OV?O@M>yJjeOl12bY4K8nR1sq~$tFh$dOH~33HksTC%v z^J=)?0r6ea{3&49_)EwFiJU`-U=~P}Y2(BK5t$z0uc7fex4Kdy5!n$;oJ(%FP-zCL2x?LP}Nu7{nF1cO)^;8Hs^=(71$=KzB zvEP~6UV@-AAl#mVtX5L|hQ(|j9ep>M!I&w#h4^%aon-;|Yi}}J==B=FE^Hoh94ymW z@*&J<^6I*>sk39{g^NzrrRFf{aX0yyI#V3TF8Ll6Et|@%))@&9RvNHE7|sUK&ui*v z)y$Z-&YNF$`PW+e08tIC>?s{N;p3y#y7_Y`gr;Ri~(R;yQ({c=dHmN*)=g# zUK?(s;o$p@%S2T&gTGNXH#^4jeP?nU7u%4jc$p*El>V`EImg{g%>0NGIT7piXgE!k zo;qoK&^_(;Fj+M3SxSs^;WAP6pweM09hI^TLH?H|2XMHZ79YLYLM7Zfg72Jjo-1kW z!@TatdT(?(ISI);S9Ss$k4&k5NF{JH?xngKj}Z?hE9*Ru!QBIpxb3LH%VC-ajUKGn zKi+0>Y&5hyF$ax==UZ5mIg!lFlBn?yQX0`;@h&L z6!4t!#0AWpkl=7NHpaTRgaF1OF#K#Sq2TolGN0v8c=0q4g)N6TS2o?azUff@25nO` zVzabtmP1UM7k7qSmS$8GuYp3iNuGYP<(jkiGBMsR>w#QF*(#WC#>o@pjq5@77Fng3 zcm{CWv9XfF{Bb@$x^u!MUA%b+!hZucRy0sV4;lo`wnyjs3%Jz^zL*Nz1fLN%9$W2R zKYT)*ZdKyYgr-T$fgOlTknzl+gQ5|Et#^B2LeH-6Ul)&ZIG+81-%$ekq@fD7W$=*t z0Yo|QQ3kwe2zY<8@&@~*Sb;f$dflP2Xtm(%<{F6DRmW$UmL-a53zl4bQ6e} z@C&Dg3fjR`@1qqnqj~;D-|tF$+x}C#SPKq+my;gfA@_>mpWB+YYG;k zfk=3;At^4^5CgNb9xzAqi8;dM-dc!CF0>4)9U|&)`}( z6r=usxjwow9$FiREWtf4yzr^gzyVHmhtVE>xUkc`oUClivg8bQwLLmH;oyXv3wI(C zkB~s(35J{7y})J`Ey1xbbswZo0_H-VGDo{9GE7Id3}k;8 zT(!J7CCyHwQxm1BiSJTV=nVS6IfSNs{^R1IgddoIf@9Z;!BUOY!R|q|@zraHvhpv~ zxsB;DgqIIp1HkCsFV2J)Vg1n;lo@+X4%6l*QRGl1Fc;bid8gfYrZR=t z40|+(C}oI~E0q@~V=%D+`t<^wBaK@rVIe+5<3^=jrEqagn_&e97MBJ))0RNy`-xD6 zLqY4b?kOqTO_In+D1@`4)}oiG%tGP4CggFTxw#puml8m1D0vl*NXI33h?K<9vw0{5 zE3U)}S&sRtOI8SIk=&bWR1c4nLvj!EU?JtGINu4gE_NBZ$^u4{t?LlE3nXfw4Lc#D z3Ayl%6EI2-8+HmDp@h-2pxXrv`wpedhWKlUB9fqg8HxF||8sLXja*EEK*3pz`kNEj ze>Hl+Ry1mWSLJhA3o_!QxMdl-kt089hch$1FlnA-G0LDG!qZDHYCN z#9?;GBYb7LoJ+Yw)y7qVOm*1bO3_OZLf$VtrH>e3|Uh&stDs#y5+p9^< zG7Yr4>8WQ&iY&@My}a~18j(G&-Hn?pNGVkjAjunYlDz9f0N;0JIEQGs1ob6jNz9Wb zA&B&=K6QB6mDH>v*tE1N&Yn+ktV)jVMhQ2Y0B^DUMZ59A873ZNHRK_W#TJ#NJC;*M>a~KRr$`sl@9LdpQ zwWUXKKjKm-E_}l&QdVLCVoSbTSHK(ejuP-DQ~}7O%+*Pkgt@GTJP;BaVP!v5FT1@H zAV$(>AmatJveaqWs*|cn1}Zs45xAwd7gP-mnw&gMBZy&w4Te_TVJ8aKsXt-pam)Pb zH?2=GMG~MFk4OThGGoZ7Zb<;OPblV71#%~D<*86A23J9(mRq)LVDdeD!5nc#F#*sL zjZ3)G+Tw$fHKo%6-AJsM!UuHsFsqIYe;c1;k}ISs_UDIgEk}i8PvbO7dw1@n0+nRG zNNU>tL;wF;{3(XVF$=Oy?k1M;lh`62;^R%s4AhAW3Ya-hPdY1n4iYP*-U!;Cf~#(1 zrsftB1EuD!s1TaFm2I!xU)aZP)9v8YwJJr?EQ&U1SdsYHmoU7=*l_xhMVwyzDY!iq zB@h)iw}!j+5^f1TX|_-a3?Eq#QNF%!Q{MJ^yujo_Y!xya=gO%CYg@ykBjl>%HlJdx zHH33pW-2RTaV+Bi7Ob+>V9Zhqw@FiyVyLh6V2}FO6EZy>dC&AQk(41X23kj_bjQ4Fpx36{pcyTEM32NTegTGtZqghM6owI$?NvY27_ox_d3Fe0ySWBtz!8eoSkzDa>OEj z8>bvn1ksWhjbiG21xJ)z3=;!wr_qF#{uHl_!jCi(QdWnG^}=8^=x#}L;*^RneFynp zeh5xBUDp?#-q|smW!@#*OQg6iH*X^K#i+?KMD*)-Ad^jr_!x6G6}bc^Ltc>HkV6QW zI^s)-c6WayYnc4;XZ$0_M?MdczAQ|hH3lE+#J4t%Z$vU7eT1Rq6i5a9+l{|5Sg8hV z4I|DiOL*v#JutPc^8_ze8+H`yG z<-$9nn#10}7C~8be!ks*i#->?4#u3NQoSC*8QM8(e5pN}#(tv^%e1kvf{79D?f+YP z2s^t*3lVsdOfi`Jgk$LXV2me!k(6Xmd{C{x?Sq^4*|R?j`lJG17l-=wL7=m-IF;;c5%=n|}?qHCcih;!rlE(2;d1oC!m#8 zGHDJ6l;J1uC7g0(O+jnW1b~yc_2_-|C&WL6@p!45p*e0+cgmnShY5>VF2FG9-m=|iMxcrjtKuE$Yxh9GRo6D<8Dnf^% zFBude9@N6pQOpDzXIQY@PnQM=_bKuIEQD=inWdG1)czYpK7a<9VS>4EmyvZ6k6}ZU zmsAO|9|C=A(S%1)LZ&wr`*O0}`BF?Mc$=^YFRE))nFPdZ;>@VZiK%#P2!))a#WhK0E^jVNgEtP9Q}KHoyE-4kE({jdCxG;E?MRPg{t=j%ijk zJ*Rq8Y%^GJ!%Vv6)R>AJFVGTca1rL4P^U0BMaYJ-DblM-q~EVBWBIY^K+WD?rUQr) zYOTYPg#HrFDP)QELn*d|`=(kA6rV;^Jl6@HQZRs#>{Vt#i%h3x(NuYGv@+K7QTbP@IGWGwAS3E? zn-nnel$$Y;rTe(K4NSC;82*Cw%8_4h1B>{Lh-}xx4UwZ@19#J&FwkPM zJX~c0B*%k__XFe9@e-7-tbEdxQEF9KV%%B*io!%mvunE0bF)y~k4~L-lbXgd{s|V5 z16C{6VNM(j``T78-AJy|)|Pz2K}7*>L-(Xatiw7pT9Y9}?57xNn9$_5OlY)u3`Mm? zb5orK2^B6v`hTE?-UnRC5CWUHT zbdk?U0~6ag#qa|orb4SSws<8m?{5M%Ikf|jEFudlOp%CzM}iC5UA`tal2kR8&u&y7 z;>GE`21?FzO=m7L=>^P1C^K!$Pi5E;`nk?XTl)pZY$$21`T15ylVx4lj+BZKNQ7hm zEK+e0+if=CIs7drdZRs8B3!SHw_@fTPwlkacGydy{k5P>*pyMU&jW`nqnmSFbGvKZNXWWn@U>kVGfa9JO?C;CM3Ql4 z3#r7N6ZJv2&eJKh@Au`jX1(7yZ23i3c&pIVVJ4K6U7R|zMf{7EZt<`G$+xKy-8gR(_H)iUCmY6F!FNOd%RQ=(Dm5bPGCSH$O=Vd&8o%kx*Ch^rpm=XpSQe zArl>y!}I_wN+8K>N1v-7BZ&eV;8_Fb3=ma=NmaXjJzfJ9JY6U~8}F-E=3)_aO_++n zkhE1tV=)GNM+01^v~@(_+^&fK)SxID%WxmnQg!ZD=nROutIP^|CnqPxjvOs{V4nOV z>hL;@s~D%6Pdxq7PFOx#DsC(8lq`(|pIxj$n#eUD0?yLigbGSM_V`3tW+`jVLL#<` z62ERiUX+~AN>dLZU@vP2LP>QWh8RFALZR9H$g%`+>Bo6(jDFJr4%p&aC&*>`L84`? zObh8%n2aEFW#Xtu@^R8LA2YFh6ymTe6pt#!pA6D)yx9rX-rud{3!LltnfS$hHWGua2BF)0BGEX4Ih9}UM)B2A8F1Gw9NDtj;U8P!-~lupaDei~If=}e zS}g$|LJOh7$RT+Yh%^ang_&e+f3P=t@TvX;4u*bfDbz+3NT`C_eC#)6v2#fPL2%&X zT#l1Mh@+Dyvh5>NK;Xix)`eKi`2pGLnsRxp-DxY%wLS^bZm4b=_SgbOivd~BX zf7F_<&0gYwp*foXImHBEF2MzQNQ4ouOy?ejjxSeBW%H zywGy|SaTn=E#|h1tQ8;@xxGa^=VA}B@rXo_q6T%CDH(^|L3xpO5#h!+4_QzFMMcJ* z9o-*lw_{~Sh7`U4$(b<#``&{TT}3F8bfts2m7Od~H;z^QhKKI3)niUSHYD`I@K2`6 zfR3l1Y@!)$1j2A>fC7NER62B_qfbX8~9}3+| z+-lF2ykt^iZ5t@aw_*D-f}};RFKS~sG1R~eQPc>w5X5&j!@V^MNcw0-3M}MtlnPjF z$vGxzTe-E&hS6>usuorOW;V610G5~wQz#W#CL=Io$Fz1$N>0^4vxdFGacWsd6%qau z@-RsclPZpy&}DNPO+i?QCWS`T&{d*+rND`nD9JZJdsO!la0)448%1>5BGh_Ll!OHp zO>4h9#66x#`#P=R4Bdwx`X7^^x;Tk2>^>0n9hHKGEon=EDg1;x6(tlare3YINoE2& z2!~NPEr?|uBv3jQ{urFgXsZxPekg*G@2`cBD>bZ+uu?}X5N<_`r@(j%2>S;1#R5VE zlge2YWwTR}gFb2=YHbXWJf3GCHFDFec|4*e+$BYzGPOnRLbVDp@m#2qiv$Kp-R~nx z)-dd`Fj+wiU*LUxJTp5Fs9IkZxBsB(E9rOlq z%g2s*2-ypSU!FR#RN7p_9tDc&r4)6oW5)W$tJkU z+>$KFO@qp-8U7o9D)Efa@&ww5d^0Erh_+GZ$!S#*4z=h7@zB5o`w78nUZPf=s7{Aa zmvj0?j_s#MX^FDqpRrBnRB2p|i^@=@ zy^yf-5X2ot?T=6if{3%DfJE{@k!XQE9Fkaorr&DxaL;EVC|N6DhXE)Ro5YK+dJh^9 z_U9!&ut};FRh2n^)LkG4nb_9UTx@JAbb`tm8uZ4=8%$A!T*l0tb~wkc;q-#OyQ>5e zS{9nQj$Sl?{|3auMCvEp`+=ZAdmv_3-5RkS_zU|1&Jl`>=)|cBmIlo+ssbqwTkvBb z{okq>YjtvXaMM)14hKG55h+WOXNrEw0NU$g+TirU`BG;GUB zU&-$eGqhQRp3B<)uExl#BUWz=!XWV#>k1_XV;o-BYXQkb*>=_?aZ#iyqdKzn2$kq6 z(=>s=tZw*Y)gv5XLvo|B>Q(C$<}&^|xN69oGu-h4!H}=^A%fvwGM>a%lxmSAA&txI zx%Nm}RG^;9X;9cDOn=m}-~kGv5K1URhK6&HaZ${PG@8Ojp_vhC4TM(QzHo4Y0muP7Kpf(Ne_B}aJmfB)zI zV)Vo(&?Cck2i-w~_EF1X992q)&R>eWYY)`=MC`R^A;C{~?wD}{&7*yJsU$1TMiRyv zl%ARcB$Oqak5o`-v{nr9f2ybE6oLw2#i>K3d;GSYOxM_l2`NIyKBpO<0|ETd|KI=l zf8l>W{m_3xGQdB^j|?}U2x$cWMnlZME!lMh%TWGIDo933K=3i11CT>-Sznj<~4s94|3E zroq4q0};P;HttmJq04xOEoGW1c&Iid?f*qQA(%UJV8a-D(e4iWL`Jj_!Z1Ko!cg+% zGL!YcI9dPuKmTtr8l@Wr9!|laf}skHyHJ=uIJMzM^=puy#!(63$wmw(_vzuJ^;V@% z#V{b1QqmEm!T6hUzPJR2@wajy8pcy|LFukyY^e=O|I68u*e&B-NgEPlbkOb{3{M-qw+L`Uqsf7l^iqxn zM=L_L=Jk?XB)H#gU$07JI>+1LaEI|oTwss8nXciKe<`!X%5W$-I_jIo$1~f+A7h>* z-zfK5Ilg3$BLr%MT~t26mEv7d0gS|+@avl89Cd`kqZlcqRk#%{5G|41cXs3O85jk4 zuyV|=(Tf?FZX$m&K!%e-E_mENIzGk!C6nEO25#jeX1F=zM+1@N%{e1>c5W6hg(m6m`A(Dmp>S9#MNU(S#hjyx^APFi1ofazvun%FCiO{?n zFb5ZO-OlJH@3F?KIHDYtWQQd~3w_aVt4ZbO=lh5g?nBi>cX?!l8eDt<7%{^JQYng+ zl2IomvT;+z)0T#zAZ0x<v@uUl&Jl$$@#l&4+WV0n?FC0_-~^%t<8qy@o)9LlpZdwQHn z)~|`Ak`ZNJ_Hbi-9nMtZ^LO#8(jFJB8EvP znpq2{u-a$CGb~drE=G&PQ(hxCx?-sDl!aN1^K3y*(tsU-RZl<+k6I|*CK#8!TZ!)D zn4gDws$hZU?SQ6E>OK;A1ON!A7sN#&vZ8!C3Pucx2u?iK#^qoNT&}rTf(rd`jI=Wh z8oc?*W`lDhfg|j8TG)@Xgt(Dtb;jHw+f<4iLLKQ=hLtG~VTPScY)2q86>Ksvg7eUB zR|t|c??Fr#s_r_GX|l~lpnC}pF1=&Y!(CFqWa&PIQbk;D%X7-juOc!N4)~VQI72pc zTtf1EB;v6s(xhK7-FX5R2C1vHpnRBaqiet(0g(+TA_xk8Dr-iv7^R2A*pWWu5#DQJ zOhuE=gsyH5l@s)B?E5d>DNiJ^np^`Cw&d@)Iz&?&T~|SkRCY~CrW>E~-DTu_ro#~T znJgVQ;5#KwdV?DjU%oi#C$(=-VdtQ~)Hvs|zrNarGRfWL;TbM&+g)HcT9^avTRzk=;EHpx}DaE1Xs z3Q2#$B=wS970Jo{E^_zs-{_JR&-DfFxsRl>lu0grzu^Ba@LN`!7Rg)^LLibJ59LZS z*ySpcb1I~t)$0r}R7MowK15k3glk0Fd>J@XQOdlTdJ~T~mB}*PmoT;u({%!oA?0t( zl#dKC01_f}=0ZJCm%QYrOO5&uro`0w2gjG=Q~1}c_h9PYt#IhSCMhP(l8{7BPeWqp zbT5J5U!N5fsgcjHHq!N-Z-re1!)WJ=ttt@dQ-xgBndU|eT3JRd<{b0$8=EV8TiXlU zZ?^W9UM>fL40-=}uP6mZ)jzpq7W%y=hS+!d$E~Ka`g9Gjb7P_fUuiIf58H3Sw1Un! zCytce0)j|THXfYWiGEu5rGIs{&xl+w z+Rlj{$uJRJ*_ezx;6X4TNrH_C!XPj!q4iN97aw!CDo@9+`Y@zBR2e^+AXPP8Lu{sa3H)E;+VALaM%7rBU({E7MMri84 zritZr#9(N^QbFhXS5=2fkm1D^B5`AD5TJ1}+6Nrfkp+Z1De-TZOs=tHHo=-iyNSoj zun?DWaw4d)mYU#mhdfqd7+w+=5dJe4h1sKiV9aQ zG)gO$0D!%je%~R&(mR9lhSOvGKv2;5o_GE+ZarJp2QOWLA()p&a9O<6OJwFi?arSI zX#Gu^b%&`;&7@%68?hCf!FkvN0=ypNZ@UPl`Bo_8TYB9)$$hOBG#nxG_KY*_hBaRCjU?YBR_)4D2zhlx}dU_ zLyUEr19@}{IS6H`Q$@&xSYF3Yf(w(}>nX2Y2|q$g*#i*jvUq&d7JW`%lHO){<2>sAIgUtP$Bt9^uxB<2gT z9gy^~rTu9=Z+&aKP|>s9BMkg!yY4(^`k7~J&>h6KXVH?ckuwN|x;ga0{mnRt`T3;3 ztf7dNiGx34E?qK{Lv%y*?gkuf*uKva&HXy7XJlGk=p7A7k>61zW5&FZ1^3TcW5>+S zXJ>4Hgb|j$f>6opEO6GY-+f$QgEQIMkNGgIFl<|HvV%Xa&9gU_{9%k*dt^|nRrjwD z_b)+HSl?7oMj70m^}54zT$>>=oV;t$&K5E0fwxk0A1ONVl5%h5AMFQ6R7Z8wL0StO zU%q}ED_?jMb1Q%koK@r^DvMTNGu{(&xkp#qI#J>VH^o}Gj@Q4;&#!LnEo^Qsys!MO zs7}7DZ*0RZyRZfW=Y~~R>*N*W<4eSDlKC=9DhFAqxpIsry)1r{EF5;`Nk&Hf;BmY5 zQtsdqi-N|wNG~wlhNMwpyfjyKVCUzgYQyylZ;Y}syeuL3S8(n+Te2M7Fpivr6bpP{?p3jpQj@VeT-b_Tn?nSOpS3_a zExAauR%LDO8{n#~GhCY6<-MBH!q2voxJ`qWI)Mxds#6VvnAl~}er9y63X9iZ5}`~Z zLhWdX76m|pP-b?NXh2SQ5wU{3bAuE66%DPZpc*?qB#Kt(Q)P5v52{1Bfi{(G%TxaN zkkVJ-P%D?b(#WinZp1sco3#?CTn)pCmE_QHsvQ}$;4j-*PY($G>CU2dbW1G6+a4~4 zfMF)!6KJ#mgcR2GRd;#t| z&M#w33tbQ#TEt-7ahGfZII}3ZJY9QAG^Yt^`*(3`THsc~siKCGv0Dt7*V7DYcGN}z z^(gv47HYjww&CN&(HgR`q}{YNBnj;-I0X?^0*1h6Rfd3YqAJbr&Z5FvxsG&k`lg zV#(N@J9czeP!qLQ)%{O&DWMpdt$$QzINAcVMO7`7t<@ORs*Ff`_()XB{P3`KMTqsm z8IV{~--lTETD)o#a&3%XG+m5fbP|JLbE}vs>m513GE|m9Z>x86?EXnT%_XBuNXDvd z@d#u{MO3V=@2;+A6fAE7ir(<3-Py%61yJ#fW~y5W{U;8lC|A;+{p=0^pd!G>Io2vnQsF7CGb#qi+udqJtB7X~wxDp>BCS6rnt*eT*)UR9~BLD@VACk5a&`AaW zVtQw33s2Z6k*^7JFcK_ref|YNv7Jim0uZ5J5XOa5fJWcsY!S`gRUOyB-avuZWu+9- z1(Pr%_dbs3UbZm_m6x2j}J-~tRt4fO+E-)GlgSf}4XrgXtPq5Zf z^8@9&$eaKzQ%ZB60ZtAZ!_&cCy@?c5(Z`-I*jijFf#}9Y4tS?^j5mR*c=TLzH<^tN zFd8q~uvX#p>mPHK^O9AJ4g_imsd458lO@c-7dG@~P7~h)cRc=33>7eNFzgSyXLTDH z*vbu{TwXy0&eFp6%JO`L*|*Wmxolgyt|YNd5ecB2r`lk$#cPdZTPJPU$dW1*oLM#s zEhI6tugvr&gV4r_HYIPeQy`06#~L9`AyU6dk56EpdP}=9&jNNtRP?$yc-_AV49i_v zUzjJHw$@qote6Ph5?sw55$Qa!y5v!WL!ia9{b7hX>9{}8)E#DKQ*+)!dj|f5t<|&sO&97YR+yX$P2tq+#C>WoWY-JM@e!?=on-=4- z3v1k2`)ez`Myou671_Bnfur1pSt(wn%^{Qcr{A2N7kBCzde|vaY_$<5*}jmtRpcfZ z(eHv~Z>mTG*nY(5EMm@Squ)o)AK3^dE334#rgy6UsMia|`X9vrHqH-*X^dQFawkVz z*jO5hNQOIGakh@PEl*)5t;;Wmxwymj5iZw43L&?cVCTEZ`dgK16|d$SCN*Cq$-q&d z%0D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%0D-4Pu{g=R<=2D1K1*PrHDT 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%0A|w>3(aIjM-(yrm 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 z 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 z

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¨+NJ&B26c*V#vc+pm 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⁢3#-^*(gH}I$R%w;G(a4#ohWHV+4BSdVaNZlB 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 ZANKvvl&|BB|Cr(Nt6%-9sGy|a{{TVX4Rrtj diff --git a/lib/composer/vendor/autoload.php b/lib/composer/vendor/autoload.php index 382455cf..bc3afe3d 100644 --- a/lib/composer/vendor/autoload.php +++ b/lib/composer/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer' . '/autoload_real.php'; -return ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da::getLoader(); +return ComposerAutoloaderInit6d4a28cd96a5bc5d5b97781c062572d9::getLoader(); diff --git a/lib/composer/vendor/bin/export-plural-rules b/lib/composer/vendor/bin/export-plural-rules new file mode 120000 index 00000000..d727a051 --- /dev/null +++ b/lib/composer/vendor/bin/export-plural-rules @@ -0,0 +1 @@ +../gettext/languages/bin/export-plural-rules \ No newline at end of file diff --git a/lib/composer/vendor/bin/export-plural-rules.php b/lib/composer/vendor/bin/export-plural-rules.php new file mode 120000 index 00000000..0e5652e9 --- /dev/null +++ b/lib/composer/vendor/bin/export-plural-rules.php @@ -0,0 +1 @@ +../gettext/languages/bin/export-plural-rules.php \ No newline at end of file diff --git a/lib/composer/vendor/bin/phpdoc-md b/lib/composer/vendor/bin/phpdoc-md deleted file mode 100755 index 280a8c08..00000000 --- a/lib/composer/vendor/bin/phpdoc-md +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env php -run(); -exit($code); - diff --git a/lib/composer/vendor/bin/phpunit b/lib/composer/vendor/bin/phpunit deleted file mode 100755 index 704e54c2..00000000 --- a/lib/composer/vendor/bin/phpunit +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (version_compare('5.6.0', PHP_VERSION, '>')) { - fwrite( - STDERR, - 'This version of PHPUnit requires PHP 5.6; using the latest version of PHP is highly recommended.' . PHP_EOL - ); - - die(1); -} - -if (!ini_get('date.timezone')) { - ini_set('date.timezone', 'UTC'); -} - -foreach (array(__DIR__ . '/../../autoload.php', __DIR__ . '/../vendor/autoload.php', __DIR__ . '/vendor/autoload.php') as $file) { - if (file_exists($file)) { - define('PHPUNIT_COMPOSER_INSTALL', $file); - - break; - } -} - -unset($file); - -if (!defined('PHPUNIT_COMPOSER_INSTALL')) { - fwrite(STDERR, - 'You need to set up the project dependencies using the following commands:' . PHP_EOL . - 'wget http://getcomposer.org/composer.phar' . PHP_EOL . - 'php composer.phar install' . PHP_EOL - ); - - die(1); -} - -require PHPUNIT_COMPOSER_INSTALL; - -PHPUnit_TextUI_Command::main(); diff --git a/lib/composer/vendor/bin/phpunit b/lib/composer/vendor/bin/phpunit new file mode 120000 index 00000000..2c489303 --- /dev/null +++ b/lib/composer/vendor/bin/phpunit @@ -0,0 +1 @@ +../phpunit/phpunit/phpunit \ No newline at end of file diff --git a/lib/composer/vendor/bin/robo b/lib/composer/vendor/bin/robo deleted file mode 100755 index ce4d9dfa..00000000 --- a/lib/composer/vendor/bin/robo +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env php -execute($_SERVER['argv']); -exit($statusCode); diff --git a/lib/composer/vendor/bin/robo b/lib/composer/vendor/bin/robo new file mode 120000 index 00000000..701d42dd --- /dev/null +++ b/lib/composer/vendor/bin/robo @@ -0,0 +1 @@ +../consolidation/robo/robo \ No newline at end of file diff --git a/lib/composer/vendor/composer/autoload_classmap.php b/lib/composer/vendor/composer/autoload_classmap.php index 6bb4897d..520a91d8 100644 --- a/lib/composer/vendor/composer/autoload_classmap.php +++ b/lib/composer/vendor/composer/autoload_classmap.php @@ -9,179 +9,178 @@ return array( 'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php', 'File_Iterator_Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php', 'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php', - 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/ForwardCompatibility/TestCase.php', - 'PHPUnit_Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php', - 'PHPUnit_Extensions_GroupTestSuite' => $vendorDir . '/phpunit/phpunit/src/Extensions/GroupTestSuite.php', - 'PHPUnit_Extensions_PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Extensions/PhptTestCase.php', - 'PHPUnit_Extensions_PhptTestSuite' => $vendorDir . '/phpunit/phpunit/src/Extensions/PhptTestSuite.php', - 'PHPUnit_Extensions_RepeatedTest' => $vendorDir . '/phpunit/phpunit/src/Extensions/RepeatedTest.php', - 'PHPUnit_Extensions_TestDecorator' => $vendorDir . '/phpunit/phpunit/src/Extensions/TestDecorator.php', - 'PHPUnit_Extensions_TicketListener' => $vendorDir . '/phpunit/phpunit/src/Extensions/TicketListener.php', - 'PHPUnit_Framework_Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit_Framework_AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', - 'PHPUnit_Framework_BaseTestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/BaseTestListener.php', - 'PHPUnit_Framework_CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', - 'PHPUnit_Framework_Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint.php', - 'PHPUnit_Framework_Constraint_And' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/And.php', - 'PHPUnit_Framework_Constraint_ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', - 'PHPUnit_Framework_Constraint_ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', - 'PHPUnit_Framework_Constraint_Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', - 'PHPUnit_Framework_Constraint_Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', - 'PHPUnit_Framework_Constraint_ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', - 'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', - 'PHPUnit_Framework_Constraint_Composite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', - 'PHPUnit_Framework_Constraint_Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Count.php', - 'PHPUnit_Framework_Constraint_Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', - 'PHPUnit_Framework_Constraint_ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', - 'PHPUnit_Framework_Constraint_ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', - 'PHPUnit_Framework_Constraint_ExceptionMessageRegExp' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegExp.php', - 'PHPUnit_Framework_Constraint_FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', - 'PHPUnit_Framework_Constraint_GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', - 'PHPUnit_Framework_Constraint_IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', - 'PHPUnit_Framework_Constraint_IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', - 'PHPUnit_Framework_Constraint_IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', - 'PHPUnit_Framework_Constraint_IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', - 'PHPUnit_Framework_Constraint_IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', - 'PHPUnit_Framework_Constraint_IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', - 'PHPUnit_Framework_Constraint_IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', - 'PHPUnit_Framework_Constraint_IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', - 'PHPUnit_Framework_Constraint_IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', - 'PHPUnit_Framework_Constraint_IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', - 'PHPUnit_Framework_Constraint_IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', - 'PHPUnit_Framework_Constraint_IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', - 'PHPUnit_Framework_Constraint_IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', - 'PHPUnit_Framework_Constraint_JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', - 'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches/ErrorMessageProvider.php', - 'PHPUnit_Framework_Constraint_LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', - 'PHPUnit_Framework_Constraint_Not' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Not.php', - 'PHPUnit_Framework_Constraint_ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', - 'PHPUnit_Framework_Constraint_Or' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Or.php', - 'PHPUnit_Framework_Constraint_PCREMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/PCREMatch.php', - 'PHPUnit_Framework_Constraint_SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', - 'PHPUnit_Framework_Constraint_StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', - 'PHPUnit_Framework_Constraint_StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', - 'PHPUnit_Framework_Constraint_StringMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatches.php', - 'PHPUnit_Framework_Constraint_StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', - 'PHPUnit_Framework_Constraint_TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', - 'PHPUnit_Framework_Constraint_TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', - 'PHPUnit_Framework_Constraint_Xor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Xor.php', - 'PHPUnit_Framework_CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_CoveredCodeNotExecutedException.php', - 'PHPUnit_Framework_Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error.php', - 'PHPUnit_Framework_Error_Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', - 'PHPUnit_Framework_Error_Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php', - 'PHPUnit_Framework_Error_Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit_Framework_Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception.php', - 'PHPUnit_Framework_ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit_Framework_ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', - 'PHPUnit_Framework_IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php', - 'PHPUnit_Framework_IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit_Framework_IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', - 'PHPUnit_Framework_InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', - 'PHPUnit_Framework_MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_MissingCoversAnnotationException.php', - 'PHPUnit_Framework_MockObject_BadMethodCallException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit_Framework_MockObject_Builder_Identity' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php', - 'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit_Framework_MockObject_Builder_Match' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php', - 'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit_Framework_MockObject_Builder_Namespace' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php', - 'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit_Framework_MockObject_Builder_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php', - 'PHPUnit_Framework_MockObject_Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php', - 'PHPUnit_Framework_MockObject_Generator' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php', - 'PHPUnit_Framework_MockObject_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php', - 'PHPUnit_Framework_MockObject_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php', - 'PHPUnit_Framework_MockObject_Invocation_Object' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php', - 'PHPUnit_Framework_MockObject_Invocation_Static' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php', - 'PHPUnit_Framework_MockObject_Invokable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php', - 'PHPUnit_Framework_MockObject_Matcher' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php', - 'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php', - 'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php', - 'PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php', - 'PHPUnit_Framework_MockObject_Matcher_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php', - 'PHPUnit_Framework_MockObject_Matcher_MethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php', - 'PHPUnit_Framework_MockObject_Matcher_Parameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php', - 'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php', - 'PHPUnit_Framework_MockObject_MockBuilder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php', - 'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php', - 'PHPUnit_Framework_MockObject_RuntimeException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit_Framework_MockObject_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php', - 'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit_Framework_MockObject_Stub_Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php', - 'PHPUnit_Framework_MockObject_Stub_Return' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnReference' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit_Framework_MockObject_Verifiable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php', - 'PHPUnit_Framework_OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/OutputError.php', - 'PHPUnit_Framework_RiskyTest' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTest.php', - 'PHPUnit_Framework_RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTestError.php', - 'PHPUnit_Framework_SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', - 'PHPUnit_Framework_SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php', - 'PHPUnit_Framework_SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit_Framework_SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestError.php', - 'PHPUnit_Framework_SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', - 'PHPUnit_Framework_SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/SyntheticError.php', - 'PHPUnit_Framework_Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php', - 'PHPUnit_Framework_TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', - 'PHPUnit_Framework_TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php', - 'PHPUnit_Framework_TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php', - 'PHPUnit_Framework_TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php', - 'PHPUnit_Framework_TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php', - 'PHPUnit_Framework_TestSuite_DataProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite/DataProvider.php', - 'PHPUnit_Framework_UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', - 'PHPUnit_Framework_Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Warning.php', - 'PHPUnit_Framework_WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php', - 'PHPUnit_Runner_BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', - 'PHPUnit_Runner_Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php', - 'PHPUnit_Runner_Filter_Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php', - 'PHPUnit_Runner_Filter_GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Group.php', - 'PHPUnit_Runner_Filter_Group_Exclude' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Group/Exclude.php', - 'PHPUnit_Runner_Filter_Group_Include' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Group/Include.php', - 'PHPUnit_Runner_Filter_Test' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Test.php', - 'PHPUnit_Runner_StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', - 'PHPUnit_Runner_TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', - 'PHPUnit_Runner_Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php', - 'PHPUnit_TextUI_Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php', - 'PHPUnit_TextUI_ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', - 'PHPUnit_TextUI_TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php', - 'PHPUnit_Util_Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php', - 'PHPUnit_Util_Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php', - 'PHPUnit_Util_ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', - 'PHPUnit_Util_ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php', - 'PHPUnit_Util_Fileloader' => $vendorDir . '/phpunit/phpunit/src/Util/Fileloader.php', - 'PHPUnit_Util_Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php', - 'PHPUnit_Util_Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php', - 'PHPUnit_Util_Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php', - 'PHPUnit_Util_GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit_Util_InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', - 'PHPUnit_Util_Log_JSON' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JSON.php', - 'PHPUnit_Util_Log_JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php', - 'PHPUnit_Util_Log_TAP' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TAP.php', - 'PHPUnit_Util_Log_TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php', - 'PHPUnit_Util_PHP' => $vendorDir . '/phpunit/phpunit/src/Util/PHP.php', - 'PHPUnit_Util_PHP_Default' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/Default.php', - 'PHPUnit_Util_PHP_Windows' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/Windows.php', - 'PHPUnit_Util_Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php', - 'PHPUnit_Util_Regex' => $vendorDir . '/phpunit/phpunit/src/Util/Regex.php', - 'PHPUnit_Util_String' => $vendorDir . '/phpunit/phpunit/src/Util/String.php', - 'PHPUnit_Util_Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php', - 'PHPUnit_Util_TestDox_NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', - 'PHPUnit_Util_TestDox_ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit_Util_TestDox_ResultPrinter_HTML' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/HTML.php', - 'PHPUnit_Util_TestDox_ResultPrinter_Text' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/Text.php', - 'PHPUnit_Util_TestDox_ResultPrinter_XML' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/XML.php', - 'PHPUnit_Util_TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Util/TestSuiteIterator.php', - 'PHPUnit_Util_Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php', - 'PHPUnit_Util_XML' => $vendorDir . '/phpunit/phpunit/src/Util/XML.php', + 'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php', + 'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php', + 'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', + 'PHPUnit\\Framework\\BaseTestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/BaseTestListener.php', + 'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', + 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', + 'PHPUnit\\Framework\\Constraint\\ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', + 'PHPUnit\\Framework\\Constraint\\Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', + 'PHPUnit\\Framework\\Constraint\\Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', + 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', + 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', + 'PHPUnit\\Framework\\Constraint\\Composite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', + 'PHPUnit\\Framework\\Constraint\\Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', + 'PHPUnit\\Framework\\Constraint\\Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Count.php', + 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php', + 'PHPUnit\\Framework\\Constraint\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php', + 'PHPUnit\\Framework\\Constraint\\FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', + 'PHPUnit\\Framework\\Constraint\\GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', + 'PHPUnit\\Framework\\Constraint\\IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', + 'PHPUnit\\Framework\\Constraint\\IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', + 'PHPUnit\\Framework\\Constraint\\IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', + 'PHPUnit\\Framework\\Constraint\\IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', + 'PHPUnit\\Framework\\Constraint\\IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', + 'PHPUnit\\Framework\\Constraint\\IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', + 'PHPUnit\\Framework\\Constraint\\IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', + 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', + 'PHPUnit\\Framework\\Constraint\\IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', + 'PHPUnit\\Framework\\Constraint\\IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', + 'PHPUnit\\Framework\\Constraint\\IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', + 'PHPUnit\\Framework\\Constraint\\IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php', + 'PHPUnit\\Framework\\Constraint\\IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', + 'PHPUnit\\Framework\\Constraint\\IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', + 'PHPUnit\\Framework\\Constraint\\IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php', + 'PHPUnit\\Framework\\Constraint\\JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', + 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', + 'PHPUnit\\Framework\\Constraint\\LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', + 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php', + 'PHPUnit\\Framework\\Constraint\\LogicalNot' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php', + 'PHPUnit\\Framework\\Constraint\\LogicalOr' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php', + 'PHPUnit\\Framework\\Constraint\\LogicalXor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php', + 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', + 'PHPUnit\\Framework\\Constraint\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php', + 'PHPUnit\\Framework\\Constraint\\SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', + 'PHPUnit\\Framework\\Constraint\\StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', + 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', + 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php', + 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', + 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php', + 'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', + 'PHPUnit\\Framework\\Error\\Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', + 'PHPUnit\\Framework\\Error\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Error.php', + 'PHPUnit\\Framework\\Error\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php', + 'PHPUnit\\Framework\\Error\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php', + 'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception.php', + 'PHPUnit\\Framework\\ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', + 'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', + 'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php', + 'PHPUnit\\Framework\\IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', + 'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', + 'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', + 'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php', + 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/BadMethodCallException.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Identity.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Match' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Match.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/MethodNameMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\NamespaceMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/NamespaceMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/ParametersMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Generator' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Generator.php', + 'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/ObjectInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Invocation\\StaticInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/StaticInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Invokable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invokable.php', + 'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/AnyInvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/AnyParameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/ConsecutiveParameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtIndex.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastOnce.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtMostCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedRecorder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedRecorder.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\MethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/MethodName.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/Parameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\StatelessInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/StatelessInvocation.php', + 'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/MockBuilder.php', + 'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/ForwardCompatibility/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/RuntimeException.php', + 'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ConsecutiveCalls.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\MatcherCollection' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/MatcherCollection.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnArgument.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnCallback.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnReference.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnSelf.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnStub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnValueMap.php', + 'PHPUnit\\Framework\\MockObject\\Verifiable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Verifiable.php', + 'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/OutputError.php', + 'PHPUnit\\Framework\\RiskyTest' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTest.php', + 'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTestError.php', + 'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', + 'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php', + 'PHPUnit\\Framework\\SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', + 'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestError.php', + 'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', + 'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/SyntheticError.php', + 'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php', + 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', + 'PHPUnit\\Framework\\TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php', + 'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php', + 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', + 'PHPUnit\\Framework\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php', + 'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php', + 'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', + 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', + 'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Warning.php', + 'PHPUnit\\Framework\\WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php', + 'PHPUnit\\Runner\\BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', + 'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php', + 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php', + 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', + 'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php', + 'PHPUnit\\Runner\\StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', + 'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', + 'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php', + 'PHPUnit\\TextUI\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php', + 'PHPUnit\\TextUI\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', + 'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php', + 'PHPUnit\\Util\\Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php', + 'PHPUnit\\Util\\Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php', + 'PHPUnit\\Util\\ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', + 'PHPUnit\\Util\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php', + 'PHPUnit\\Util\\Fileloader' => $vendorDir . '/phpunit/phpunit/src/Util/Fileloader.php', + 'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php', + 'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php', + 'PHPUnit\\Util\\Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php', + 'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php', + 'PHPUnit\\Util\\InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', + 'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php', + 'PHPUnit\\Util\\Log\\JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php', + 'PHPUnit\\Util\\Log\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php', + 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', + 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', + 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', + 'PHPUnit\\Util\\Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php', + 'PHPUnit\\Util\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Util/RegularExpression.php', + 'PHPUnit\\Util\\Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php', + 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', + 'PHPUnit\\Util\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', + 'PHPUnit\\Util\\TextTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', + 'PHPUnit\\Util\\Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php', + 'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/XML.php', + 'PHPUnit\\Util\\XmlTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', + 'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/MockObject.php', 'PHP_Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php', 'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', @@ -311,6 +310,7 @@ return array( 'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NULLSAFE_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', @@ -381,7 +381,72 @@ return array( 'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'Robo\\composer\\ScriptHandler' => $vendorDir . '/consolidation/robo/scripts/composer/ScriptHandler.php', + 'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php', + 'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php', + 'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php', + 'PharIo\\Manifest\\AuthorCollection' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollection.php', + 'PharIo\\Manifest\\AuthorCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', + 'PharIo\\Manifest\\AuthorElement' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElement.php', + 'PharIo\\Manifest\\AuthorElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElementCollection.php', + 'PharIo\\Manifest\\BundledComponent' => $vendorDir . '/phar-io/manifest/src/values/BundledComponent.php', + 'PharIo\\Manifest\\BundledComponentCollection' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollection.php', + 'PharIo\\Manifest\\BundledComponentCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', + 'PharIo\\Manifest\\BundlesElement' => $vendorDir . '/phar-io/manifest/src/xml/BundlesElement.php', + 'PharIo\\Manifest\\ComponentElement' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElement.php', + 'PharIo\\Manifest\\ComponentElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElementCollection.php', + 'PharIo\\Manifest\\ContainsElement' => $vendorDir . '/phar-io/manifest/src/xml/ContainsElement.php', + 'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php', + 'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php', + 'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php', + 'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php', + 'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php', + 'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php', + 'PharIo\\Manifest\\ExtElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ExtElementCollection.php', + 'PharIo\\Manifest\\Extension' => $vendorDir . '/phar-io/manifest/src/values/Extension.php', + 'PharIo\\Manifest\\ExtensionElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtensionElement.php', + 'PharIo\\Manifest\\InvalidApplicationNameException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', + 'PharIo\\Manifest\\InvalidEmailException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', + 'PharIo\\Manifest\\InvalidUrlException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', + 'PharIo\\Manifest\\Library' => $vendorDir . '/phar-io/manifest/src/values/Library.php', + 'PharIo\\Manifest\\License' => $vendorDir . '/phar-io/manifest/src/values/License.php', + 'PharIo\\Manifest\\LicenseElement' => $vendorDir . '/phar-io/manifest/src/xml/LicenseElement.php', + 'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php', + 'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php', + 'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', + 'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php', + 'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php', + 'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', + 'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php', + 'PharIo\\Manifest\\ManifestElementException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestElementException.php', + 'PharIo\\Manifest\\ManifestLoader' => $vendorDir . '/phar-io/manifest/src/ManifestLoader.php', + 'PharIo\\Manifest\\ManifestLoaderException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', + 'PharIo\\Manifest\\ManifestSerializer' => $vendorDir . '/phar-io/manifest/src/ManifestSerializer.php', + 'PharIo\\Manifest\\PhpElement' => $vendorDir . '/phar-io/manifest/src/xml/PhpElement.php', + 'PharIo\\Manifest\\PhpExtensionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', + 'PharIo\\Manifest\\PhpVersionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpVersionRequirement.php', + 'PharIo\\Manifest\\Requirement' => $vendorDir . '/phar-io/manifest/src/values/Requirement.php', + 'PharIo\\Manifest\\RequirementCollection' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollection.php', + 'PharIo\\Manifest\\RequirementCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', + 'PharIo\\Manifest\\RequiresElement' => $vendorDir . '/phar-io/manifest/src/xml/RequiresElement.php', + 'PharIo\\Manifest\\Type' => $vendorDir . '/phar-io/manifest/src/values/Type.php', + 'PharIo\\Manifest\\Url' => $vendorDir . '/phar-io/manifest/src/values/Url.php', + 'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/AbstractVersionConstraint.php', + 'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/AndVersionConstraintGroup.php', + 'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/AnyVersionConstraint.php', + 'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/ExactVersionConstraint.php', + 'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/Exception.php', + 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php', + 'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/InvalidVersionException.php', + 'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/OrVersionConstraintGroup.php', + 'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php', + 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => $vendorDir . '/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php', + 'PharIo\\Version\\SpecificMajorVersionConstraint' => $vendorDir . '/phar-io/version/src/SpecificMajorVersionConstraint.php', + 'PharIo\\Version\\UnsupportedVersionConstraintException' => $vendorDir . '/phar-io/version/src/UnsupportedVersionConstraintException.php', + 'PharIo\\Version\\Version' => $vendorDir . '/phar-io/version/src/Version.php', + 'PharIo\\Version\\VersionConstraint' => $vendorDir . '/phar-io/version/src/VersionConstraint.php', + 'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php', + 'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php', + 'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php', @@ -406,6 +471,7 @@ return array( 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php', 'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', @@ -414,12 +480,14 @@ return array( 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', 'SebastianBergmann\\CodeCoverage\\RuntimeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php', 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', 'SebastianBergmann\\CodeCoverage\\Util' => $vendorDir . '/phpunit/php-code-coverage/src/Util.php', + 'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php', 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', 'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php', 'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php', @@ -439,27 +507,45 @@ return array( 'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php', 'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php', 'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php', - 'SebastianBergmann\\Diff\\LCS\\LongestCommonSubsequence' => $vendorDir . '/sebastian/diff/src/LCS/LongestCommonSubsequence.php', - 'SebastianBergmann\\Diff\\LCS\\MemoryEfficientImplementation' => $vendorDir . '/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php', - 'SebastianBergmann\\Diff\\LCS\\TimeEfficientImplementation' => $vendorDir . '/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php', + 'SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php', + 'SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php', 'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php', + 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', + 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', + 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', + 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', + 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', + 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', 'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php', + 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php', + 'SebastianBergmann\\Environment\\OperatingSystem' => $vendorDir . '/sebastian/environment/src/OperatingSystem.php', 'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php', 'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php', 'SebastianBergmann\\GlobalState\\Blacklist' => $vendorDir . '/sebastian/global-state/src/Blacklist.php', 'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php', - 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/Exception.php', + 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/exceptions/Exception.php', 'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php', - 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/RuntimeException.php', + 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/exceptions/RuntimeException.php', 'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php', 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php', 'SebastianBergmann\\ObjectEnumerator\\Exception' => $vendorDir . '/sebastian/object-enumerator/src/Exception.php', 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => $vendorDir . '/sebastian/object-enumerator/src/InvalidArgumentException.php', + 'SebastianBergmann\\ObjectReflector\\Exception' => $vendorDir . '/sebastian/object-reflector/src/Exception.php', + 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => $vendorDir . '/sebastian/object-reflector/src/InvalidArgumentException.php', + 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => $vendorDir . '/sebastian/object-reflector/src/ObjectReflector.php', 'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php', 'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php', 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php', 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php', 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php', 'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php', + 'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php', + 'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php', + 'TheSeer\\Tokenizer\\NamespaceUriException' => $vendorDir . '/theseer/tokenizer/src/NamespaceUriException.php', + 'TheSeer\\Tokenizer\\Token' => $vendorDir . '/theseer/tokenizer/src/Token.php', + 'TheSeer\\Tokenizer\\TokenCollection' => $vendorDir . '/theseer/tokenizer/src/TokenCollection.php', + 'TheSeer\\Tokenizer\\TokenCollectionException' => $vendorDir . '/theseer/tokenizer/src/TokenCollectionException.php', + 'TheSeer\\Tokenizer\\Tokenizer' => $vendorDir . '/theseer/tokenizer/src/Tokenizer.php', + 'TheSeer\\Tokenizer\\XMLSerializer' => $vendorDir . '/theseer/tokenizer/src/XMLSerializer.php', ); diff --git a/lib/composer/vendor/composer/autoload_files.php b/lib/composer/vendor/composer/autoload_files.php index 548876d6..7ddd692a 100644 --- a/lib/composer/vendor/composer/autoload_files.php +++ b/lib/composer/vendor/composer/autoload_files.php @@ -7,5 +7,6 @@ $baseDir = dirname($vendorDir); return array( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', '2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php', ); diff --git a/lib/composer/vendor/composer/autoload_namespaces.php b/lib/composer/vendor/composer/autoload_namespaces.php index b85f909d..afaf5392 100644 --- a/lib/composer/vendor/composer/autoload_namespaces.php +++ b/lib/composer/vendor/composer/autoload_namespaces.php @@ -8,6 +8,11 @@ $baseDir = dirname($vendorDir); return array( 'Twig_' => array($vendorDir . '/twig/twig/lib'), 'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'), - 'PHPDocsMD' => array($vendorDir . '/victorjonsson/markdowndocs/src'), + 'PEAR' => array($vendorDir . '/pear/pear_exception'), + 'Net' => array($vendorDir . '/pear/net_smtp', $vendorDir . '/pear/net_socket'), + 'Mail' => array($vendorDir . '/pear/mail'), 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib'), + 'Dflydev\\DotAccessData' => array($vendorDir . '/dflydev/dot-access-data/src'), + 'Console' => array($vendorDir . '/pear/console_getopt'), + '' => array($vendorDir . '/pear/pear-core-minimal/src'), ); diff --git a/lib/composer/vendor/composer/autoload_psr4.php b/lib/composer/vendor/composer/autoload_psr4.php index bc642f37..97f8fc9c 100644 --- a/lib/composer/vendor/composer/autoload_psr4.php +++ b/lib/composer/vendor/composer/autoload_psr4.php @@ -6,7 +6,7 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/type-resolver/src', $vendorDir . '/phpdocumentor/reflection-docblock/src'), + 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'), 'Whoops\\' => array($vendorDir . '/filp/whoops/src/Whoops'), 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), @@ -19,9 +19,12 @@ return array( 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), 'Robo\\' => array($vendorDir . '/consolidation/robo/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), + 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 'League\\Container\\' => array($vendorDir . '/league/container/src'), 'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'), + 'Grasmash\\YamlExpander\\' => array($vendorDir . '/grasmash/yaml-expander/src'), + 'Grasmash\\Expander\\' => array($vendorDir . '/grasmash/expander/src'), 'Gettext\\Languages\\' => array($vendorDir . '/gettext/languages/src'), 'Gettext\\' => array($vendorDir . '/gettext/gettext/src'), 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'), @@ -29,6 +32,7 @@ return array( 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), 'Consolidation\\OutputFormatters\\' => array($vendorDir . '/consolidation/output-formatters/src'), 'Consolidation\\Log\\' => array($vendorDir . '/consolidation/log/src'), + 'Consolidation\\Config\\' => array($vendorDir . '/consolidation/config/src'), 'Consolidation\\AnnotatedCommand\\' => array($vendorDir . '/consolidation/annotated-command/src'), '' => array($baseDir . '/../../src'), ); diff --git a/lib/composer/vendor/composer/autoload_real.php b/lib/composer/vendor/composer/autoload_real.php index 37c9bb7b..9b640787 100644 --- a/lib/composer/vendor/composer/autoload_real.php +++ b/lib/composer/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da +class ComposerAutoloaderInit6d4a28cd96a5bc5d5b97781c062572d9 { private static $loader; @@ -19,15 +19,19 @@ class ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit6d4a28cd96a5bc5d5b97781c062572d9', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit6d4a28cd96a5bc5d5b97781c062572d9', 'loadClassLoader')); + + $includePaths = require __DIR__ . '/include_paths.php'; + array_push($includePaths, get_include_path()); + set_include_path(join(PATH_SEPARATOR, $includePaths)); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION'); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -48,19 +52,19 @@ class ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$files; + $includeFiles = Composer\Autoload\ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequirea01cedac3fb3abb6b395843685a2b9da($fileIdentifier, $file); + composerRequire6d4a28cd96a5bc5d5b97781c062572d9($fileIdentifier, $file); } return $loader; } } -function composerRequirea01cedac3fb3abb6b395843685a2b9da($fileIdentifier, $file) +function composerRequire6d4a28cd96a5bc5d5b97781c062572d9($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/lib/composer/vendor/composer/autoload_static.php b/lib/composer/vendor/composer/autoload_static.php index 2cee87c6..787f1750 100644 --- a/lib/composer/vendor/composer/autoload_static.php +++ b/lib/composer/vendor/composer/autoload_static.php @@ -4,10 +4,11 @@ namespace Composer\Autoload; -class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da +class ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9 { public static $files = array ( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', '2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php', ); @@ -39,6 +40,7 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'P' => array ( 'Psr\\Log\\' => 8, + 'Psr\\Container\\' => 14, ), 'M' => array ( @@ -54,6 +56,8 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da ), 'G' => array ( + 'Grasmash\\YamlExpander\\' => 22, + 'Grasmash\\Expander\\' => 18, 'Gettext\\Languages\\' => 18, 'Gettext\\' => 8, ), @@ -70,6 +74,7 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 'Consolidation\\OutputFormatters\\' => 31, 'Consolidation\\Log\\' => 18, + 'Consolidation\\Config\\' => 21, 'Consolidation\\AnnotatedCommand\\' => 31, ), ); @@ -78,8 +83,8 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'phpDocumentor\\Reflection\\' => array ( 0 => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src', - 1 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src', - 2 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src', + 1 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src', + 2 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src', ), 'Whoops\\' => array ( @@ -129,6 +134,10 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', ), + 'Psr\\Container\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/container/src', + ), 'Monolog\\' => array ( 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog', @@ -141,6 +150,14 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container', ), + 'Grasmash\\YamlExpander\\' => + array ( + 0 => __DIR__ . '/..' . '/grasmash/yaml-expander/src', + ), + 'Grasmash\\Expander\\' => + array ( + 0 => __DIR__ . '/..' . '/grasmash/expander/src', + ), 'Gettext\\Languages\\' => array ( 0 => __DIR__ . '/..' . '/gettext/languages/src', @@ -169,6 +186,10 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/consolidation/log/src', ), + 'Consolidation\\Config\\' => + array ( + 0 => __DIR__ . '/..' . '/consolidation/config/src', + ), 'Consolidation\\AnnotatedCommand\\' => array ( 0 => __DIR__ . '/..' . '/consolidation/annotated-command/src', @@ -193,9 +214,24 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/phpspec/prophecy/src', ), - 'PHPDocsMD' => + 'PEAR' => array ( - 0 => __DIR__ . '/..' . '/victorjonsson/markdowndocs/src', + 0 => __DIR__ . '/..' . '/pear/pear_exception', + ), + ), + 'N' => + array ( + 'Net' => + array ( + 0 => __DIR__ . '/..' . '/pear/net_smtp', + 1 => __DIR__ . '/..' . '/pear/net_socket', + ), + ), + 'M' => + array ( + 'Mail' => + array ( + 0 => __DIR__ . '/..' . '/pear/mail', ), ), 'D' => @@ -204,186 +240,200 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/doctrine/lexer/lib', ), + 'Dflydev\\DotAccessData' => + array ( + 0 => __DIR__ . '/..' . '/dflydev/dot-access-data/src', + ), ), + 'C' => + array ( + 'Console' => + array ( + 0 => __DIR__ . '/..' . '/pear/console_getopt', + ), + ), + ); + + public static $fallbackDirsPsr0 = array ( + 0 => __DIR__ . '/..' . '/pear/pear-core-minimal/src', ); public static $classMap = array ( 'File_Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php', 'File_Iterator_Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php', 'File_Iterator_Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php', - 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/ForwardCompatibility/TestCase.php', - 'PHPUnit_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php', - 'PHPUnit_Extensions_GroupTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/GroupTestSuite.php', - 'PHPUnit_Extensions_PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/PhptTestCase.php', - 'PHPUnit_Extensions_PhptTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/PhptTestSuite.php', - 'PHPUnit_Extensions_RepeatedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/RepeatedTest.php', - 'PHPUnit_Extensions_TestDecorator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/TestDecorator.php', - 'PHPUnit_Extensions_TicketListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/TicketListener.php', - 'PHPUnit_Framework_Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit_Framework_AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', - 'PHPUnit_Framework_BaseTestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/BaseTestListener.php', - 'PHPUnit_Framework_CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', - 'PHPUnit_Framework_Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint.php', - 'PHPUnit_Framework_Constraint_And' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/And.php', - 'PHPUnit_Framework_Constraint_ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', - 'PHPUnit_Framework_Constraint_ArraySubset' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', - 'PHPUnit_Framework_Constraint_Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', - 'PHPUnit_Framework_Constraint_Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', - 'PHPUnit_Framework_Constraint_ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', - 'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', - 'PHPUnit_Framework_Constraint_Composite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', - 'PHPUnit_Framework_Constraint_Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Count.php', - 'PHPUnit_Framework_Constraint_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', - 'PHPUnit_Framework_Constraint_ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', - 'PHPUnit_Framework_Constraint_ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', - 'PHPUnit_Framework_Constraint_ExceptionMessageRegExp' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegExp.php', - 'PHPUnit_Framework_Constraint_FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', - 'PHPUnit_Framework_Constraint_GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', - 'PHPUnit_Framework_Constraint_IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', - 'PHPUnit_Framework_Constraint_IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', - 'PHPUnit_Framework_Constraint_IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', - 'PHPUnit_Framework_Constraint_IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', - 'PHPUnit_Framework_Constraint_IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', - 'PHPUnit_Framework_Constraint_IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', - 'PHPUnit_Framework_Constraint_IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', - 'PHPUnit_Framework_Constraint_IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', - 'PHPUnit_Framework_Constraint_IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', - 'PHPUnit_Framework_Constraint_IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', - 'PHPUnit_Framework_Constraint_IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', - 'PHPUnit_Framework_Constraint_IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', - 'PHPUnit_Framework_Constraint_IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', - 'PHPUnit_Framework_Constraint_JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', - 'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches/ErrorMessageProvider.php', - 'PHPUnit_Framework_Constraint_LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', - 'PHPUnit_Framework_Constraint_Not' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Not.php', - 'PHPUnit_Framework_Constraint_ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', - 'PHPUnit_Framework_Constraint_Or' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Or.php', - 'PHPUnit_Framework_Constraint_PCREMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/PCREMatch.php', - 'PHPUnit_Framework_Constraint_SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', - 'PHPUnit_Framework_Constraint_StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', - 'PHPUnit_Framework_Constraint_StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', - 'PHPUnit_Framework_Constraint_StringMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringMatches.php', - 'PHPUnit_Framework_Constraint_StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', - 'PHPUnit_Framework_Constraint_TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', - 'PHPUnit_Framework_Constraint_TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', - 'PHPUnit_Framework_Constraint_Xor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Xor.php', - 'PHPUnit_Framework_CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_CoveredCodeNotExecutedException.php', - 'PHPUnit_Framework_Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error.php', - 'PHPUnit_Framework_Error_Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', - 'PHPUnit_Framework_Error_Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php', - 'PHPUnit_Framework_Error_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit_Framework_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception.php', - 'PHPUnit_Framework_ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit_Framework_ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', - 'PHPUnit_Framework_IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php', - 'PHPUnit_Framework_IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit_Framework_IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', - 'PHPUnit_Framework_InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', - 'PHPUnit_Framework_MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_MissingCoversAnnotationException.php', - 'PHPUnit_Framework_MockObject_BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit_Framework_MockObject_Builder_Identity' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php', - 'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit_Framework_MockObject_Builder_Match' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php', - 'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit_Framework_MockObject_Builder_Namespace' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php', - 'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit_Framework_MockObject_Builder_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php', - 'PHPUnit_Framework_MockObject_Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php', - 'PHPUnit_Framework_MockObject_Generator' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php', - 'PHPUnit_Framework_MockObject_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php', - 'PHPUnit_Framework_MockObject_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php', - 'PHPUnit_Framework_MockObject_Invocation_Object' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php', - 'PHPUnit_Framework_MockObject_Invocation_Static' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php', - 'PHPUnit_Framework_MockObject_Invokable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php', - 'PHPUnit_Framework_MockObject_Matcher' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php', - 'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php', - 'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php', - 'PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php', - 'PHPUnit_Framework_MockObject_Matcher_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php', - 'PHPUnit_Framework_MockObject_Matcher_MethodName' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php', - 'PHPUnit_Framework_MockObject_Matcher_Parameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php', - 'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php', - 'PHPUnit_Framework_MockObject_MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php', - 'PHPUnit_Framework_MockObject_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php', - 'PHPUnit_Framework_MockObject_RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit_Framework_MockObject_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php', - 'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit_Framework_MockObject_Stub_Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php', - 'PHPUnit_Framework_MockObject_Stub_Return' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit_Framework_MockObject_Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php', - 'PHPUnit_Framework_OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/OutputError.php', - 'PHPUnit_Framework_RiskyTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTest.php', - 'PHPUnit_Framework_RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTestError.php', - 'PHPUnit_Framework_SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', - 'PHPUnit_Framework_SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php', - 'PHPUnit_Framework_SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit_Framework_SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestError.php', - 'PHPUnit_Framework_SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', - 'PHPUnit_Framework_SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SyntheticError.php', - 'PHPUnit_Framework_Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php', - 'PHPUnit_Framework_TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php', - 'PHPUnit_Framework_TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php', - 'PHPUnit_Framework_TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php', - 'PHPUnit_Framework_TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php', - 'PHPUnit_Framework_TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php', - 'PHPUnit_Framework_TestSuite_DataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite/DataProvider.php', - 'PHPUnit_Framework_UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', - 'PHPUnit_Framework_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Warning.php', - 'PHPUnit_Framework_WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php', - 'PHPUnit_Runner_BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', - 'PHPUnit_Runner_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php', - 'PHPUnit_Runner_Filter_Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php', - 'PHPUnit_Runner_Filter_GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Group.php', - 'PHPUnit_Runner_Filter_Group_Exclude' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Group/Exclude.php', - 'PHPUnit_Runner_Filter_Group_Include' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Group/Include.php', - 'PHPUnit_Runner_Filter_Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Test.php', - 'PHPUnit_Runner_StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', - 'PHPUnit_Runner_TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', - 'PHPUnit_Runner_Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php', - 'PHPUnit_TextUI_Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php', - 'PHPUnit_TextUI_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', - 'PHPUnit_TextUI_TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php', - 'PHPUnit_Util_Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php', - 'PHPUnit_Util_Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Configuration.php', - 'PHPUnit_Util_ConfigurationGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', - 'PHPUnit_Util_ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php', - 'PHPUnit_Util_Fileloader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Fileloader.php', - 'PHPUnit_Util_Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php', - 'PHPUnit_Util_Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php', - 'PHPUnit_Util_Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Getopt.php', - 'PHPUnit_Util_GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit_Util_InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', - 'PHPUnit_Util_Log_JSON' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JSON.php', - 'PHPUnit_Util_Log_JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php', - 'PHPUnit_Util_Log_TAP' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TAP.php', - 'PHPUnit_Util_Log_TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php', - 'PHPUnit_Util_PHP' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP.php', - 'PHPUnit_Util_PHP_Default' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/Default.php', - 'PHPUnit_Util_PHP_Windows' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/Windows.php', - 'PHPUnit_Util_Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Printer.php', - 'PHPUnit_Util_Regex' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Regex.php', - 'PHPUnit_Util_String' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/String.php', - 'PHPUnit_Util_Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php', - 'PHPUnit_Util_TestDox_NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', - 'PHPUnit_Util_TestDox_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit_Util_TestDox_ResultPrinter_HTML' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/HTML.php', - 'PHPUnit_Util_TestDox_ResultPrinter_Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/Text.php', - 'PHPUnit_Util_TestDox_ResultPrinter_XML' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/XML.php', - 'PHPUnit_Util_TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestSuiteIterator.php', - 'PHPUnit_Util_Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php', - 'PHPUnit_Util_XML' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XML.php', + 'PHPUnit\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php', + 'PHPUnit\\Framework\\Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php', + 'PHPUnit\\Framework\\AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', + 'PHPUnit\\Framework\\BaseTestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/BaseTestListener.php', + 'PHPUnit\\Framework\\CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', + 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', + 'PHPUnit\\Framework\\Constraint\\ArraySubset' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', + 'PHPUnit\\Framework\\Constraint\\Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', + 'PHPUnit\\Framework\\Constraint\\Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', + 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', + 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', + 'PHPUnit\\Framework\\Constraint\\Composite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', + 'PHPUnit\\Framework\\Constraint\\Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', + 'PHPUnit\\Framework\\Constraint\\Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Count.php', + 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php', + 'PHPUnit\\Framework\\Constraint\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php', + 'PHPUnit\\Framework\\Constraint\\FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', + 'PHPUnit\\Framework\\Constraint\\GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', + 'PHPUnit\\Framework\\Constraint\\IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', + 'PHPUnit\\Framework\\Constraint\\IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', + 'PHPUnit\\Framework\\Constraint\\IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', + 'PHPUnit\\Framework\\Constraint\\IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', + 'PHPUnit\\Framework\\Constraint\\IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', + 'PHPUnit\\Framework\\Constraint\\IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', + 'PHPUnit\\Framework\\Constraint\\IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', + 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', + 'PHPUnit\\Framework\\Constraint\\IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', + 'PHPUnit\\Framework\\Constraint\\IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', + 'PHPUnit\\Framework\\Constraint\\IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', + 'PHPUnit\\Framework\\Constraint\\IsReadable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php', + 'PHPUnit\\Framework\\Constraint\\IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', + 'PHPUnit\\Framework\\Constraint\\IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', + 'PHPUnit\\Framework\\Constraint\\IsWritable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php', + 'PHPUnit\\Framework\\Constraint\\JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', + 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', + 'PHPUnit\\Framework\\Constraint\\LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', + 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php', + 'PHPUnit\\Framework\\Constraint\\LogicalNot' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php', + 'PHPUnit\\Framework\\Constraint\\LogicalOr' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php', + 'PHPUnit\\Framework\\Constraint\\LogicalXor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php', + 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', + 'PHPUnit\\Framework\\Constraint\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php', + 'PHPUnit\\Framework\\Constraint\\SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', + 'PHPUnit\\Framework\\Constraint\\StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', + 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', + 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php', + 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', + 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php', + 'PHPUnit\\Framework\\DataProviderTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', + 'PHPUnit\\Framework\\Error\\Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', + 'PHPUnit\\Framework\\Error\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Error.php', + 'PHPUnit\\Framework\\Error\\Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php', + 'PHPUnit\\Framework\\Error\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php', + 'PHPUnit\\Framework\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception.php', + 'PHPUnit\\Framework\\ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', + 'PHPUnit\\Framework\\ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', + 'PHPUnit\\Framework\\IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php', + 'PHPUnit\\Framework\\IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', + 'PHPUnit\\Framework\\IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', + 'PHPUnit\\Framework\\InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', + 'PHPUnit\\Framework\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php', + 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Exception/BadMethodCallException.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/Identity.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Match' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/Match.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/MethodNameMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\NamespaceMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/NamespaceMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/ParametersMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Exception/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Generator.php', + 'PHPUnit\\Framework\\MockObject\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Invocation/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Invocation/ObjectInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Invocation\\StaticInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Invocation/StaticInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Invokable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Invokable.php', + 'PHPUnit\\Framework\\MockObject\\Matcher' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/AnyInvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/AnyParameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/ConsecutiveParameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtIndex.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastOnce.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtMostCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedRecorder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedRecorder.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\MethodName' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/MethodName.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/Parameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\StatelessInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/StatelessInvocation.php', + 'PHPUnit\\Framework\\MockObject\\MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/MockBuilder.php', + 'PHPUnit\\Framework\\MockObject\\MockObject' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/ForwardCompatibility/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Exception/RuntimeException.php', + 'PHPUnit\\Framework\\MockObject\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ConsecutiveCalls.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\MatcherCollection' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/MatcherCollection.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnArgument.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnCallback.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnReference.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnSelf.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnStub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnValueMap.php', + 'PHPUnit\\Framework\\MockObject\\Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Verifiable.php', + 'PHPUnit\\Framework\\OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/OutputError.php', + 'PHPUnit\\Framework\\RiskyTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTest.php', + 'PHPUnit\\Framework\\RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTestError.php', + 'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', + 'PHPUnit\\Framework\\SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php', + 'PHPUnit\\Framework\\SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', + 'PHPUnit\\Framework\\SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestError.php', + 'PHPUnit\\Framework\\SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', + 'PHPUnit\\Framework\\SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SyntheticError.php', + 'PHPUnit\\Framework\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php', + 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php', + 'PHPUnit\\Framework\\TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php', + 'PHPUnit\\Framework\\TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php', + 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', + 'PHPUnit\\Framework\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php', + 'PHPUnit\\Framework\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php', + 'PHPUnit\\Framework\\TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', + 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', + 'PHPUnit\\Framework\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Warning.php', + 'PHPUnit\\Framework\\WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php', + 'PHPUnit\\Runner\\BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', + 'PHPUnit\\Runner\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php', + 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php', + 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', + 'PHPUnit\\Runner\\PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/PhptTestCase.php', + 'PHPUnit\\Runner\\StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', + 'PHPUnit\\Runner\\TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', + 'PHPUnit\\Runner\\Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php', + 'PHPUnit\\TextUI\\Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php', + 'PHPUnit\\TextUI\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', + 'PHPUnit\\TextUI\\TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php', + 'PHPUnit\\Util\\Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php', + 'PHPUnit\\Util\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Configuration.php', + 'PHPUnit\\Util\\ConfigurationGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', + 'PHPUnit\\Util\\ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php', + 'PHPUnit\\Util\\Fileloader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Fileloader.php', + 'PHPUnit\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php', + 'PHPUnit\\Util\\Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php', + 'PHPUnit\\Util\\Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Getopt.php', + 'PHPUnit\\Util\\GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php', + 'PHPUnit\\Util\\InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', + 'PHPUnit\\Util\\Json' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Json.php', + 'PHPUnit\\Util\\Log\\JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php', + 'PHPUnit\\Util\\Log\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php', + 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', + 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', + 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', + 'PHPUnit\\Util\\Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Printer.php', + 'PHPUnit\\Util\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/RegularExpression.php', + 'PHPUnit\\Util\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php', + 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', + 'PHPUnit\\Util\\TestDox\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', + 'PHPUnit\\Util\\TextTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', + 'PHPUnit\\Util\\Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php', + 'PHPUnit\\Util\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XML.php', + 'PHPUnit\\Util\\XmlTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', + 'PHPUnit_Framework_MockObject_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/MockObject.php', 'PHP_Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php', 'PHP_Token' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_TokenWithScope' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', @@ -513,6 +563,7 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'PHP_Token_NEW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NS_SEPARATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NULLSAFE_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NUM_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_OBJECT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', @@ -583,7 +634,72 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD_FROM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'Robo\\composer\\ScriptHandler' => __DIR__ . '/..' . '/consolidation/robo/scripts/composer/ScriptHandler.php', + 'PharIo\\Manifest\\Application' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Application.php', + 'PharIo\\Manifest\\ApplicationName' => __DIR__ . '/..' . '/phar-io/manifest/src/values/ApplicationName.php', + 'PharIo\\Manifest\\Author' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Author.php', + 'PharIo\\Manifest\\AuthorCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollection.php', + 'PharIo\\Manifest\\AuthorCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', + 'PharIo\\Manifest\\AuthorElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElement.php', + 'PharIo\\Manifest\\AuthorElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElementCollection.php', + 'PharIo\\Manifest\\BundledComponent' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponent.php', + 'PharIo\\Manifest\\BundledComponentCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollection.php', + 'PharIo\\Manifest\\BundledComponentCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', + 'PharIo\\Manifest\\BundlesElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/BundlesElement.php', + 'PharIo\\Manifest\\ComponentElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElement.php', + 'PharIo\\Manifest\\ComponentElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElementCollection.php', + 'PharIo\\Manifest\\ContainsElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ContainsElement.php', + 'PharIo\\Manifest\\CopyrightElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/CopyrightElement.php', + 'PharIo\\Manifest\\CopyrightInformation' => __DIR__ . '/..' . '/phar-io/manifest/src/values/CopyrightInformation.php', + 'PharIo\\Manifest\\ElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ElementCollection.php', + 'PharIo\\Manifest\\Email' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Email.php', + 'PharIo\\Manifest\\Exception' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/Exception.php', + 'PharIo\\Manifest\\ExtElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElement.php', + 'PharIo\\Manifest\\ExtElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElementCollection.php', + 'PharIo\\Manifest\\Extension' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Extension.php', + 'PharIo\\Manifest\\ExtensionElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtensionElement.php', + 'PharIo\\Manifest\\InvalidApplicationNameException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', + 'PharIo\\Manifest\\InvalidEmailException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', + 'PharIo\\Manifest\\InvalidUrlException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', + 'PharIo\\Manifest\\Library' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Library.php', + 'PharIo\\Manifest\\License' => __DIR__ . '/..' . '/phar-io/manifest/src/values/License.php', + 'PharIo\\Manifest\\LicenseElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/LicenseElement.php', + 'PharIo\\Manifest\\Manifest' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Manifest.php', + 'PharIo\\Manifest\\ManifestDocument' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocument.php', + 'PharIo\\Manifest\\ManifestDocumentException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', + 'PharIo\\Manifest\\ManifestDocumentLoadingException' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php', + 'PharIo\\Manifest\\ManifestDocumentMapper' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestDocumentMapper.php', + 'PharIo\\Manifest\\ManifestDocumentMapperException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', + 'PharIo\\Manifest\\ManifestElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestElement.php', + 'PharIo\\Manifest\\ManifestElementException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestElementException.php', + 'PharIo\\Manifest\\ManifestLoader' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestLoader.php', + 'PharIo\\Manifest\\ManifestLoaderException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', + 'PharIo\\Manifest\\ManifestSerializer' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestSerializer.php', + 'PharIo\\Manifest\\PhpElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/PhpElement.php', + 'PharIo\\Manifest\\PhpExtensionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', + 'PharIo\\Manifest\\PhpVersionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpVersionRequirement.php', + 'PharIo\\Manifest\\Requirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Requirement.php', + 'PharIo\\Manifest\\RequirementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollection.php', + 'PharIo\\Manifest\\RequirementCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', + 'PharIo\\Manifest\\RequiresElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/RequiresElement.php', + 'PharIo\\Manifest\\Type' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Type.php', + 'PharIo\\Manifest\\Url' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Url.php', + 'PharIo\\Version\\AbstractVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/AbstractVersionConstraint.php', + 'PharIo\\Version\\AndVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/AndVersionConstraintGroup.php', + 'PharIo\\Version\\AnyVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/AnyVersionConstraint.php', + 'PharIo\\Version\\ExactVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/ExactVersionConstraint.php', + 'PharIo\\Version\\Exception' => __DIR__ . '/..' . '/phar-io/version/src/Exception.php', + 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php', + 'PharIo\\Version\\InvalidVersionException' => __DIR__ . '/..' . '/phar-io/version/src/InvalidVersionException.php', + 'PharIo\\Version\\OrVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/OrVersionConstraintGroup.php', + 'PharIo\\Version\\PreReleaseSuffix' => __DIR__ . '/..' . '/phar-io/version/src/PreReleaseSuffix.php', + 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php', + 'PharIo\\Version\\SpecificMajorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/SpecificMajorVersionConstraint.php', + 'PharIo\\Version\\UnsupportedVersionConstraintException' => __DIR__ . '/..' . '/phar-io/version/src/UnsupportedVersionConstraintException.php', + 'PharIo\\Version\\Version' => __DIR__ . '/..' . '/phar-io/version/src/Version.php', + 'PharIo\\Version\\VersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraint.php', + 'PharIo\\Version\\VersionConstraintParser' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintParser.php', + 'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php', + 'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php', @@ -608,6 +724,7 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/PHP.php', 'SebastianBergmann\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Text.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', @@ -616,12 +733,14 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', 'SebastianBergmann\\CodeCoverage\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php', 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', 'SebastianBergmann\\CodeCoverage\\Util' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util.php', + 'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php', 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', 'SebastianBergmann\\Comparator\\ArrayComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ArrayComparator.php', 'SebastianBergmann\\Comparator\\Comparator' => __DIR__ . '/..' . '/sebastian/comparator/src/Comparator.php', @@ -641,39 +760,58 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php', 'SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php', 'SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php', - 'SebastianBergmann\\Diff\\LCS\\LongestCommonSubsequence' => __DIR__ . '/..' . '/sebastian/diff/src/LCS/LongestCommonSubsequence.php', - 'SebastianBergmann\\Diff\\LCS\\MemoryEfficientImplementation' => __DIR__ . '/..' . '/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php', - 'SebastianBergmann\\Diff\\LCS\\TimeEfficientImplementation' => __DIR__ . '/..' . '/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php', + 'SebastianBergmann\\Diff\\Exception' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/Exception.php', + 'SebastianBergmann\\Diff\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/InvalidArgumentException.php', 'SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php', + 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', + 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', + 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', + 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', + 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', + 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', 'SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php', + 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Environment\\Console' => __DIR__ . '/..' . '/sebastian/environment/src/Console.php', + 'SebastianBergmann\\Environment\\OperatingSystem' => __DIR__ . '/..' . '/sebastian/environment/src/OperatingSystem.php', 'SebastianBergmann\\Environment\\Runtime' => __DIR__ . '/..' . '/sebastian/environment/src/Runtime.php', 'SebastianBergmann\\Exporter\\Exporter' => __DIR__ . '/..' . '/sebastian/exporter/src/Exporter.php', 'SebastianBergmann\\GlobalState\\Blacklist' => __DIR__ . '/..' . '/sebastian/global-state/src/Blacklist.php', 'SebastianBergmann\\GlobalState\\CodeExporter' => __DIR__ . '/..' . '/sebastian/global-state/src/CodeExporter.php', - 'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/Exception.php', + 'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/Exception.php', 'SebastianBergmann\\GlobalState\\Restorer' => __DIR__ . '/..' . '/sebastian/global-state/src/Restorer.php', - 'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/RuntimeException.php', + 'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/RuntimeException.php', 'SebastianBergmann\\GlobalState\\Snapshot' => __DIR__ . '/..' . '/sebastian/global-state/src/Snapshot.php', 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Enumerator.php', 'SebastianBergmann\\ObjectEnumerator\\Exception' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Exception.php', 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/InvalidArgumentException.php', + 'SebastianBergmann\\ObjectReflector\\Exception' => __DIR__ . '/..' . '/sebastian/object-reflector/src/Exception.php', + 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-reflector/src/InvalidArgumentException.php', + 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => __DIR__ . '/..' . '/sebastian/object-reflector/src/ObjectReflector.php', 'SebastianBergmann\\RecursionContext\\Context' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Context.php', 'SebastianBergmann\\RecursionContext\\Exception' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Exception.php', 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/recursion-context/src/InvalidArgumentException.php', 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => __DIR__ . '/..' . '/sebastian/resource-operations/src/ResourceOperations.php', 'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php', 'Text_Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php', + 'TheSeer\\Tokenizer\\Exception' => __DIR__ . '/..' . '/theseer/tokenizer/src/Exception.php', + 'TheSeer\\Tokenizer\\NamespaceUri' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUri.php', + 'TheSeer\\Tokenizer\\NamespaceUriException' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUriException.php', + 'TheSeer\\Tokenizer\\Token' => __DIR__ . '/..' . '/theseer/tokenizer/src/Token.php', + 'TheSeer\\Tokenizer\\TokenCollection' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollection.php', + 'TheSeer\\Tokenizer\\TokenCollectionException' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollectionException.php', + 'TheSeer\\Tokenizer\\Tokenizer' => __DIR__ . '/..' . '/theseer/tokenizer/src/Tokenizer.php', + 'TheSeer\\Tokenizer\\XMLSerializer' => __DIR__ . '/..' . '/theseer/tokenizer/src/XMLSerializer.php', ); public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$prefixDirsPsr4; - $loader->fallbackDirsPsr4 = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$fallbackDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$prefixesPsr0; - $loader->classMap = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$prefixDirsPsr4; + $loader->fallbackDirsPsr4 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$fallbackDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$classMap; }, null, ClassLoader::class); } diff --git a/lib/composer/vendor/composer/include_paths.php b/lib/composer/vendor/composer/include_paths.php new file mode 100644 index 00000000..7b7813d4 --- /dev/null +++ b/lib/composer/vendor/composer/include_paths.php @@ -0,0 +1,15 @@ +=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" + "consolidation/output-formatters": "^3.1.12", + "php": ">=5.4.0", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "aws/aws-sdk-php": "~2.4, >2.4.8", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "phpunit/phpunit": "~4.0", - "raven/raven": "~0.5", - "ruflin/elastica": "0.90.*", - "swiftmailer/swiftmailer": "~5.3", - "videlalvaro/php-amqplib": "~2.4" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7" }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "raven/raven": "Allow sending log messages to a Sentry server", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" - }, - "time": "2015-03-09 09:58:04", + "time": "2017-11-29 16:23:23", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13.x-dev" + "dev-master": "2.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Monolog\\": "src/Monolog" + "Consolidation\\AnnotatedCommand\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -61,393 +46,54 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" } ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ] + "description": "Initialize Symfony Console commands from annotated command class methods." }, { - "name": "twig/twig", - "version": "v1.23.3", - "version_normalized": "1.23.3.0", + "name": "consolidation/config", + "version": "1.0.9", + "version_normalized": "1.0.9.0", "source": { "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "ae53fc2c312fdee63773b75cb570304f85388b08" + "url": "https://github.com/consolidation/config.git", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/ae53fc2c312fdee63773b75cb570304f85388b08", - "reference": "ae53fc2c312fdee63773b75cb570304f85388b08", + "url": "https://api.github.com/repos/consolidation/config/zipball/34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c", "shasum": "" }, "require": { - "php": ">=5.2.7" - }, - "require-dev": { - "symfony/debug": "~2.7", - "symfony/phpunit-bridge": "~2.7" - }, - "time": "2016-01-11 14:02:19", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.23-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Twig_": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - }, - { - "name": "Twig Team", - "homepage": "http://twig.sensiolabs.org/contributors", - "role": "Contributors" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "http://twig.sensiolabs.org", - "keywords": [ - "templating" - ] - }, - { - "name": "gettext/languages", - "version": "2.1.2", - "version_normalized": "2.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/mlocati/cldr-to-gettext-plural-rules.git", - "reference": "c43ade7e3fb68bcf2379036513dce8d20553d9c8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/c43ade7e3fb68bcf2379036513dce8d20553d9c8", - "reference": "c43ade7e3fb68bcf2379036513dce8d20553d9c8", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "time": "2015-03-27 11:32:41", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Gettext\\Languages\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michele Locati", - "email": "mlocati@gmail.com", - "role": "Developer" - } - ], - "description": "gettext languages with plural rules", - "homepage": "https://github.com/mlocati/cldr-to-gettext-plural-rules", - "keywords": [ - "cldr", - "i18n", - "internationalization", - "l10n", - "language", - "languages", - "localization", - "php", - "plural", - "plural rules", - "plurals", - "translate", - "translations", - "unicode" - ] - }, - { - "name": "gettext/gettext", - "version": "v4.0.0", - "version_normalized": "4.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/oscarotero/Gettext.git", - "reference": "7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/oscarotero/Gettext/zipball/7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1", - "reference": "7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1", - "shasum": "" - }, - "require": { - "gettext/languages": "2.*", + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", "php": ">=5.4.0" }, "require-dev": { - "illuminate/view": "*", - "symfony/yaml": "~2", - "twig/extensions": "*", - "twig/twig": "*" + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" }, "suggest": { - "illuminate/view": "Is necessary if you want to use the Blade extractor", - "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", - "twig/extensions": "Is necessary if you want to use the Twig extractor", - "twig/twig": "Is necessary if you want to use the Twig extractor" + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" }, - "time": "2016-06-15 18:14:14", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Gettext\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Oscar Otero", - "email": "oom@oscarotero.com", - "homepage": "http://oscarotero.com", - "role": "Developer" - } - ], - "description": "PHP gettext manager", - "homepage": "https://github.com/oscarotero/Gettext", - "keywords": [ - "JS", - "gettext", - "i18n", - "mo", - "po", - "translation" - ] - }, - { - "name": "symfony/event-dispatcher", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "time": "2016-10-13 06:28:43", + "time": "2017-12-22 17:28:19", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.x-dev" } }, "installation-source": "dist", "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" - }, - { - "name": "symfony/filesystem", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0565b61bf098cb4dc09f4f103f033138ae4f42c6", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "time": "2016-10-18 04:30:12", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "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 Filesystem Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/process", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "time": "2016-09-29 14:13:09", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "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" - }, - { - "name": "psr/log", - "version": "1.0.2", - "version_normalized": "1.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-10-10 12:19:37", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Consolidation\\Config\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -456,418 +102,38 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ] - }, - { - "name": "symfony/debug", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" - }, - "time": "2016-09-06 11:02:40", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "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 Debug Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2016-11-14 01:06:16", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "symfony/console", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c99da1119ae61e15de0e4829196b9fba6f73d065", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "time": "2016-10-06 01:44:51", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "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" - }, - { - "name": "symfony/finder", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "time": "2016-09-28 00:11:12", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "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" - }, - { - "name": "container-interop/container-interop", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", - "shasum": "" - }, - "time": "2014-12-30 15:22:37", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)" - }, - { - "name": "league/container", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/container.git", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/c0e7d947b690891f700dc4967ead7bdb3d6708c1", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1", - "shasum": "" - }, - "require": { - "container-interop/container-interop": "^1.1", - "php": ">=5.4.0" - }, - "provide": { - "container-interop/container-interop-implementation": "^1.1" - }, - "replace": { - "orno/di": "~2.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*" - }, - "time": "2016-03-17 11:07:59", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev", - "dev-1.x": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "League\\Container\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Phil Bennett", - "email": "philipobenito@gmail.com", - "homepage": "http://www.philipobenito.com", - "role": "Developer" - } - ], - "description": "A fast and intuitive dependency injection container.", - "homepage": "https://github.com/thephpleague/container", - "keywords": [ - "container", - "dependency", - "di", - "injection", - "league", - "provider", - "service" - ] - }, - { - "name": "victorjonsson/markdowndocs", - "version": "1.3.7", - "version_normalized": "1.3.7.0", - "source": { - "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" - }, - "require-dev": { - "phpunit/phpunit": "3.7.23" - }, - "time": "2016-10-11 21:10:19", - "bin": [ - "bin/phpdoc-md" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "PHPDocsMD": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" - } - ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator" + "description": "Provide configuration services for a commandline tool." }, { "name": "consolidation/log", - "version": "1.0.3", - "version_normalized": "1.0.3.0", + "version": "1.0.5", + "version_normalized": "1.0.5.0", "source": { "type": "git", "url": "https://github.com/consolidation/log.git", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254" + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/log/zipball/74ba81b4edc585616747cc5c5309ce56fec41254", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254", + "url": "https://api.github.com/repos/consolidation/log/zipball/dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821", "shasum": "" }, "require": { "php": ">=5.5.0", "psr/log": "~1.0", - "symfony/console": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4" }, "require-dev": { "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", "squizlabs/php_codesniffer": "2.*" }, - "time": "2016-03-23 23:46:42", + "time": "2017-11-29 01:44:16", "type": "library", "extra": { "branch-alias": { @@ -893,38 +159,42 @@ "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components." }, { - "name": "webmozart/assert", - "version": "1.1.0", - "version_normalized": "1.1.0.0", + "name": "consolidation/output-formatters", + "version": "3.1.13", + "version_normalized": "3.1.13.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", "shasum": "" }, "require": { - "php": "^5.3.3|^7.0" + "php": ">=5.4.0", + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" }, - "time": "2016-08-09 15:02:57", + "time": "2017-11-29 15:25:38", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "3.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" + "Consolidation\\OutputFormatters\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -933,232 +203,75 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ] - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "time": "2015-12-27 11:43:31", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.2", - "version_normalized": "0.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "time": "2016-06-10 07:14:17", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ] - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", - "version_normalized": "3.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" - }, - "time": "2016-09-30 07:12:33", - "type": "library", - "installation-source": "dist", - "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." + "description": "Format text by applying transformations provided by plug-in formatters." }, { "name": "consolidation/robo", - "version": "1.0.4", - "version_normalized": "1.0.4.0", + "version": "1.2.1", + "version_normalized": "1.2.1.0", "source": { "type": "git", "url": "https://github.com/consolidation/Robo.git", - "reference": "bfe2246358298d7839114612f84bcfdca3c14066" + "reference": "b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/Robo/zipball/bfe2246358298d7839114612f84bcfdca3c14066", - "reference": "bfe2246358298d7839114612f84bcfdca3c14066", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9", + "reference": "b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9", "shasum": "" }, "require": { - "consolidation/annotated-command": "^2.0.1", + "consolidation/annotated-command": "^2.8.2", + "consolidation/config": "^1.0.1", "consolidation/log": "~1", - "consolidation/output-formatters": "^2.1.2|~3", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", "league/container": "^2.2", "php": ">=5.5.0", - "symfony/console": "~2.8|~3.0", - "symfony/event-dispatcher": "~2.5|~3.0", - "symfony/filesystem": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "symfony/process": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4" }, "replace": { "codegyre/robo": "< 1.0" }, "require-dev": { - "codeception/aspect-mock": "~1", - "codeception/base": "^2.2.6", + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", "codeception/verify": "^0.3.2", - "henrikbjorn/lurker": "~1", - "natxet/cssmin": "~3", + "greg-1-anderson/composer-test-scenarios": "^1", + "natxet/cssmin": "3.0.4", "patchwork/jsqueeze": "~2", "pear/archive_tar": "^1.4.2", "phpunit/php-code-coverage": "~2|~4", - "satooshi/php-coveralls": "~1", - "squizlabs/php_codesniffer": "~2" + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "^2.8" }, "suggest": { "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", - "natxet/CssMin": "For minifying JS files in taskMinify", + "natxet/CssMin": "For minifying CSS files in taskMinify", "patchwork/jsqueeze": "For minifying JS files in taskMinify", "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." }, - "time": "2016-11-15 19:24:36", + "time": "2017-12-29 06:48:35", "bin": [ "robo" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "scripts/composer/ScriptHandler.php" - ], "psr-4": { "Robo\\": "src" } @@ -1176,81 +289,57 @@ "description": "Modern task runner" }, { - "name": "symfony/yaml", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", + "name": "container-interop/container-interop", + "version": "1.2.0", + "version_normalized": "1.2.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27" + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, "require": { - "php": ">=5.5.9" + "psr/container": "^1.0" }, - "time": "2016-10-24 18:41:13", + "time": "2017-02-14 19:40:03", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Interop\\Container\\": "src/Interop/Container/" + } }, "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" + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop" }, { - "name": "sebastian/global-state", - "version": "1.1.1", - "version_normalized": "1.1.1.0", + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "version_normalized": "1.1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.2" }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "time": "2015-10-12 03:26:01", + "time": "2017-01-20 21:14:22", "type": "library", "extra": { "branch-alias": { @@ -1259,254 +348,38 @@ }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" - ] + "psr-0": { + "Dflydev\\DotAccessData": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", "keywords": [ - "global state" - ] - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.4", - "version_normalized": "1.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/938df7a6478e72795e5f8266cff24d06e3136f2e", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "time": "2016-11-15 06:55:36", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "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" - }, - { - "name": "sebastian/exporter", - "version": "1.2.2", - "version_normalized": "1.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" - }, - "time": "2016-06-17 09:04:28", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "sebastian/environment", - "version": "1.3.8", - "version_normalized": "1.3.8.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" - }, - "time": "2016-08-18 05:49:44", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "sebastian/diff", - "version": "1.4.1", - "version_normalized": "1.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.8" - }, - "time": "2015-12-08 07:14:41", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "installation-source": "dist", - "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" + "access", + "data", + "dot", + "notation" ] }, { @@ -1565,932 +438,6 @@ "instantiate" ] }, - { - "name": "phpspec/prophecy", - "version": "v1.6.1", - "version_normalized": "1.6.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.0" - }, - "time": "2016-06-07 08:13:47", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "sebastian/version", - "version": "2.0.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "time": "2016-02-04 12:56:52", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "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" - }, - { - "name": "sebastian/resource-operations", - "version": "1.0.0", - "version_normalized": "1.0.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" - }, - "time": "2015-07-28 20:34:47", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "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" - }, - { - "name": "sebastian/object-enumerator", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~5" - }, - "time": "2016-01-28 13:25:10", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "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/" - }, - { - "name": "sebastian/comparator", - "version": "1.2.2", - "version_normalized": "1.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a1ed12e8b2409076ab22e3897126211ff8b1f7f", - "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2 || ~2.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "time": "2016-11-19 09:18:40", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "installation-source": "dist", - "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": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ] - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "~5" - }, - "time": "2016-02-13 06:45:14", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "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/" - }, - { - "name": "myclabs/deep-copy", - "version": "1.5.5", - "version_normalized": "1.5.5.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/399c1f9781e222f6eb6cc238796f5200d1b7f108", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" - }, - "time": "2016-10-31 17:19:45", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ] - }, - { - "name": "consolidation/output-formatters", - "version": "3.1.3", - "version_normalized": "3.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/consolidation/output-formatters.git", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/1e6c6ab49904a31c310940ec4efccf5f36e386e4", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" - }, - "time": "2016-11-18 23:04:31", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Consolidation\\OutputFormatters\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - } - ], - "description": "Format text by applying transformations provided by plug-in formatters." - }, - { - "name": "consolidation/annotated-command", - "version": "2.1.3", - "version_normalized": "2.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/consolidation/annotated-command.git", - "reference": "6dcc442cbdc2c5145bb19e042d6b5f3979003b9f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/6dcc442cbdc2c5145bb19e042d6b5f3979003b9f", - "reference": "6dcc442cbdc2c5145bb19e042d6b5f3979003b9f", - "shasum": "" - }, - "require": { - "consolidation/output-formatters": "^3.1.3", - "php": ">=5.4.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "psr/log": "~1", - "symfony/console": "^2.8|~3", - "symfony/event-dispatcher": "^2.5|~3", - "symfony/finder": "^2.5|~3" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "^2.7" - }, - "time": "2016-11-19 01:02:43", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Consolidation\\AnnotatedCommand\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - } - ], - "description": "Initialize Symfony Console commands from annotated command class methods." - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "version_normalized": "1.2.1.0", - "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" - }, - "time": "2015-06-21 13:50:34", - "type": "library", - "installation-source": "dist", - "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" - ] - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "3.4.1", - "version_normalized": "3.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/45026c8383187ad1dcb14fbfec77dced265b9cfc", - "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2 || ^2.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4" - }, - "suggest": { - "ext-soap": "*" - }, - "time": "2016-11-19 09:07:46", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2.x-dev" - } - }, - "installation-source": "dist", - "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": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ] - }, - { - "name": "phpunit/php-timer", - "version": "1.0.8", - "version_normalized": "1.0.8.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4|~5" - }, - "time": "2016-05-12 18:03:57", - "type": "library", - "installation-source": "dist", - "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" - ] - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.1", - "version_normalized": "1.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2015-06-21 13:08:43", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.9", - "version_normalized": "1.4.9.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "time": "2016-11-15 14:06:22", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "phpunit/php-code-coverage", - "version": "4.0.2", - "version_normalized": "4.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6cba06ff75a1a63a71033e1a01b89056f3af1e8d", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" - }, - "time": "2016-11-01 05:06:24", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "installation-source": "dist", - "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": "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" - ] - }, - { - "name": "phpunit/phpunit", - "version": "5.5.7", - "version_normalized": "5.5.7.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3f67cee782c9abfaee5e32fd2f57cdd54bc257ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3f67cee782c9abfaee5e32fd2f57cdd54bc257ba", - "reference": "3f67cee782c9abfaee5e32fd2f57cdd54bc257ba", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "~1.3", - "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", - "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-tidy": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "~1.1" - }, - "time": "2016-10-03 13:04:15", - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.5.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "filp/whoops", - "version": "2.1.10", - "version_normalized": "2.1.10.0", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0", - "psr/log": "^1.0.1" - }, - "require-dev": { - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "^4.8 || ^5.0", - "symfony/var-dumper": "^2.6 || ^3.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "time": "2017-08-03 18:23:40", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "whoops", - "zf2" - ] - }, { "name": "doctrine/lexer", "version": "v1.0.1", @@ -2606,6 +553,2168 @@ "validator" ] }, + { + "name": "filp/whoops", + "version": "2.1.14", + "version_normalized": "2.1.14.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "symfony/var-dumper": "^2.6 || ^3.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "time": "2017-11-23 18:22:44", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ] + }, + { + "name": "gettext/gettext", + "version": "v4.0.0", + "version_normalized": "4.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/oscarotero/Gettext.git", + "reference": "7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/oscarotero/Gettext/zipball/7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1", + "reference": "7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1", + "shasum": "" + }, + "require": { + "gettext/languages": "2.*", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/view": "*", + "symfony/yaml": "~2", + "twig/extensions": "*", + "twig/twig": "*" + }, + "suggest": { + "illuminate/view": "Is necessary if you want to use the Blade extractor", + "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", + "twig/extensions": "Is necessary if you want to use the Twig extractor", + "twig/twig": "Is necessary if you want to use the Twig extractor" + }, + "time": "2016-06-15 18:14:14", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Gettext\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oscar Otero", + "email": "oom@oscarotero.com", + "homepage": "http://oscarotero.com", + "role": "Developer" + } + ], + "description": "PHP gettext manager", + "homepage": "https://github.com/oscarotero/Gettext", + "keywords": [ + "JS", + "gettext", + "i18n", + "mo", + "po", + "translation" + ] + }, + { + "name": "gettext/languages", + "version": "2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/mlocati/cldr-to-gettext-plural-rules.git", + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/49c39e51569963cc917a924b489e7025bfb9d8c7", + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^4" + }, + "time": "2017-03-23 17:02:28", + "bin": [ + "bin/export-plural-rules", + "bin/export-plural-rules.php" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Gettext\\Languages\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michele Locati", + "email": "mlocati@gmail.com", + "role": "Developer" + } + ], + "description": "gettext languages with plural rules", + "homepage": "https://github.com/mlocati/cldr-to-gettext-plural-rules", + "keywords": [ + "cldr", + "i18n", + "internationalization", + "l10n", + "language", + "languages", + "localization", + "php", + "plural", + "plural rules", + "plurals", + "translate", + "translations", + "unicode" + ] + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "time": "2017-12-21 22:14:55", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file." + }, + { + "name": "grasmash/yaml-expander", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "time": "2017-12-16 16:06:03", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in a yaml file." + }, + { + "name": "league/container", + "version": "2.4.1", + "version_normalized": "2.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" + }, + "replace": { + "orno/di": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "time": "2017-05-10 09:20:27", + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\Container\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", + "role": "Developer" + } + ], + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", + "keywords": [ + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" + ] + }, + { + "name": "monolog/monolog", + "version": "1.13.1", + "version_normalized": "1.13.1.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", + "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "~2.4, >2.4.8", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "phpunit/phpunit": "~4.0", + "raven/raven": "~0.5", + "ruflin/elastica": "0.90.*", + "swiftmailer/swiftmailer": "~5.3", + "videlalvaro/php-amqplib": "~2.4" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "raven/raven": "Allow sending log messages to a Sentry server", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" + }, + "time": "2015-03-09 09:58:04", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.13.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ] + }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "version_normalized": "1.7.0.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" + }, + "time": "2017-10-19 19:58:43", + "type": "library", + "installation-source": "dist", + "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" + ] + }, + { + "name": "pear/console_getopt", + "version": "v1.4.1", + "version_normalized": "1.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Console_Getopt.git", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "shasum": "" + }, + "time": "2015-07-20 20:28:12", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Console": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" + }, + { + "name": "Andrei Zmievski", + "email": "andrei@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Developer" + } + ], + "description": "More info available on: http://pear.php.net/package/Console_Getopt" + }, + { + "name": "pear/net_smtp", + "version": "1.7.3", + "version_normalized": "1.7.3.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Net_SMTP.git", + "reference": "e066e5ee011ae056c03db1a95d210fc09649b477" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/e066e5ee011ae056c03db1a95d210fc09649b477", + "reference": "e066e5ee011ae056c03db1a95d210fc09649b477", + "shasum": "" + }, + "require": { + "pear/net_socket": "*", + "pear/pear-core-minimal": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "pear/auth_sasl": "Install optionally via your project's composer.json" + }, + "time": "2017-01-14 18:19:55", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Net": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "PHP-3.01" + ], + "authors": [ + { + "name": "Jon Parise", + "email": "jon@php.net", + "homepage": "http://www.indelible.org", + "role": "Lead" + }, + { + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" + } + ], + "description": "An implementation of the SMTP protocol", + "homepage": "http://pear.github.io/Net_SMTP/", + "keywords": [ + "email", + "mail", + "smtp" + ] + }, + { + "name": "pear/net_socket", + "version": "v1.2.1", + "version_normalized": "1.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Net_Socket.git", + "reference": "f31d75ac352d49908f8987bbb1496c02a409812a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Net_Socket/zipball/f31d75ac352d49908f8987bbb1496c02a409812a", + "reference": "f31d75ac352d49908f8987bbb1496c02a409812a", + "shasum": "" + }, + "require": { + "pear/pear_exception": "@stable", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4" + }, + "time": "2017-04-06 15:16:38", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Net": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" + }, + { + "name": "Aleksander Machniak", + "email": "alec@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Lead" + } + ], + "description": "More info available on: http://pear.php.net/package/Net_Socket" + }, + { + "name": "pear/pear-core-minimal", + "version": "v1.10.3", + "version_normalized": "1.10.3.0", + "source": { + "type": "git", + "url": "https://github.com/pear/pear-core-minimal.git", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", + "shasum": "" + }, + "require": { + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" + }, + "replace": { + "rsky/pear-core-min": "self.version" + }, + "time": "2017-02-28 16:46:11", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "src/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@php.net", + "role": "Lead" + } + ], + "description": "Minimal set of PEAR core files to be used as composer dependency" + }, + { + "name": "pear/pear_exception", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", + "shasum": "" + }, + "require": { + "php": ">=4.4.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "time": "2015-02-10 20:07:52", + "type": "class", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "PEAR": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "." + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", + "keywords": [ + "exception" + ] + }, + { + "name": "phar-io/manifest", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "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" + }, + "time": "2017-03-05 18:14:27", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "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)" + }, + { + "name": "phar-io/version", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "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" + }, + "time": "2017-03-05 17:38:23", + "type": "library", + "installation-source": "dist", + "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" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "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" + }, + "time": "2017-09-11 18:02:19", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.2.0", + "version_normalized": "4.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "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" + }, + "time": "2017-11-27 17:38:31", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "installation-source": "dist", + "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." + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "version_normalized": "0.4.0.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" + }, + "time": "2017-07-14 14:27:02", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ] + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "version_normalized": "1.7.3.0", + "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" + }, + "time": "2017-11-24 13:59:53", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "phpunit/php-code-coverage", + "version": "5.3.0", + "version_normalized": "5.3.0.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" + }, + "time": "2017-12-06 09:29:45", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.3.x-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "version_normalized": "1.4.5.0", + "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" + }, + "time": "2017-11-27 13:52:08", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "version_normalized": "1.2.1.0", + "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" + }, + "time": "2015-06-21 13:50:34", + "type": "library", + "installation-source": "dist", + "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" + ] + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "version_normalized": "1.0.9.0", + "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" + }, + "time": "2017-02-26 11:10:40", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "version_normalized": "2.0.2.0", + "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" + }, + "time": "2017-11-27 05:48:46", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "phpunit/phpunit", + "version": "6.5.5", + "version_normalized": "6.5.5.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "83d27937a310f2984fd575686138597147bdc7df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/83d27937a310f2984fd575686138597147bdc7df", + "reference": "83d27937a310f2984fd575686138597147bdc7df", + "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" + }, + "time": "2017-12-17 06:31:19", + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5.x-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.6", + "version_normalized": "5.0.6.0", + "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": "*" + }, + "time": "2018-01-06 05:45:45", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "psr/container", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2017-02-14 16:28:37", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ] + }, + { + "name": "psr/log", + "version": "1.0.2", + "version_normalized": "1.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-10-10 12:19:37", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ] + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "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" + }, + "time": "2017-03-04 06:30:41", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "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/" + }, + { + "name": "sebastian/comparator", + "version": "2.1.1", + "version_normalized": "2.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b11c729f95109b56a0fe9650c6a63a0fcd8c439f", + "reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/diff": "^2.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.4" + }, + "time": "2017-12-22 14:50:35", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "sebastian/diff", + "version": "2.0.1", + "version_normalized": "2.0.1.0", + "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" + }, + "time": "2017-08-03 08:09:46", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "sebastian/environment", + "version": "3.1.0", + "version_normalized": "3.1.0.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" + }, + "time": "2017-07-01 08:51:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "sebastian/exporter", + "version": "3.1.0", + "version_normalized": "3.1.0.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" + }, + "time": "2017-04-03 13:19:02", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "version_normalized": "2.0.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": "*" + }, + "time": "2017-04-27 15:39:26", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "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" + }, + "time": "2017-08-03 12:35:26", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "installation-source": "dist", + "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/" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "version_normalized": "1.1.1.0", + "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" + }, + "time": "2017-03-29 09:07:27", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "installation-source": "dist", + "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/" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "version_normalized": "3.0.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" + }, + "time": "2017-03-03 06:23:57", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "installation-source": "dist", + "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" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "version_normalized": "1.0.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" + }, + "time": "2015-07-28 20:34:47", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "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" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "version_normalized": "2.0.1.0", + "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" + }, + "time": "2016-10-03 07:35:21", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "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" + }, { "name": "swiftmailer/swiftmailer", "version": "v6.0.2", @@ -2662,5 +2771,690 @@ "mail", "mailer" ] + }, + { + "name": "symfony/console", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "8394c8ef121949e8f858f13bc1e34f05169e4e7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/8394c8ef121949e8f858f13bc1e34f05169e4e7d", + "reference": "8394c8ef121949e8f858f13bc1e34f05169e4e7d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "time": "2018-01-03 07:37:34", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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" + }, + { + "name": "symfony/debug", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "603b95dda8b00020e4e6e60dc906e7b715b1c245" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/603b95dda8b00020e4e6e60dc906e7b715b1c245", + "reference": "603b95dda8b00020e4e6e60dc906e7b715b1c245", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "time": "2018-01-03 17:14:19", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "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 Debug Component", + "homepage": "https://symfony.com" + }, + { + "name": "symfony/event-dispatcher", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/26b87b6bca8f8f797331a30b76fdae5342dc26ca", + "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "time": "2018-01-03 07:37:34", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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" + }, + { + "name": "symfony/filesystem", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "e078773ad6354af38169faf31c21df0f18ace03d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e078773ad6354af38169faf31c21df0f18ace03d", + "reference": "e078773ad6354af38169faf31c21df0f18ace03d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "time": "2018-01-03 07:37:34", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com" + }, + { + "name": "symfony/finder", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f", + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "time": "2018-01-03 07:37:34", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2017-10-11 12:05:26", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "symfony/process", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "ff69f110c6b33fd33cd2089ba97d6112f44ef0ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/ff69f110c6b33fd33cd2089ba97d6112f44ef0ba", + "reference": "ff69f110c6b33fd33cd2089ba97d6112f44ef0ba", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "time": "2018-01-03 07:37:34", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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" + }, + { + "name": "symfony/yaml", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "25c192f25721a74084272671f658797d9e0e0146" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/25c192f25721a74084272671f658797d9e0e0146", + "reference": "25c192f25721a74084272671f658797d9e0e0146", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "time": "2018-01-03 07:37:34", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.0", + "version_normalized": "1.1.0.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" + }, + "time": "2017-04-07 12:08:54", + "type": "library", + "installation-source": "dist", + "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" + }, + { + "name": "twig/twig", + "version": "v1.23.3", + "version_normalized": "1.23.3.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "ae53fc2c312fdee63773b75cb570304f85388b08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/ae53fc2c312fdee63773b75cb570304f85388b08", + "reference": "ae53fc2c312fdee63773b75cb570304f85388b08", + "shasum": "" + }, + "require": { + "php": ">=5.2.7" + }, + "require-dev": { + "symfony/debug": "~2.7", + "symfony/phpunit-bridge": "~2.7" + }, + "time": "2016-01-11 14:02:19", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.23-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Twig_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ] + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "time": "2016-11-23 20:04:58", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "installation-source": "dist", + "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" + ] + }, + { + "name": "pear/mail", + "version": "v1.4.1", + "version_normalized": "1.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Mail.git", + "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Mail/zipball/9609ed5e42ac5b221dfd9af85de005c59d418ee7", + "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7", + "shasum": "" + }, + "require": { + "pear/pear-core-minimal": "~1.9", + "php": ">=5.2.1" + }, + "require-dev": { + "pear/pear": "*" + }, + "suggest": { + "pear/net_smtp": "Install optionally via your project's composer.json" + }, + "time": "2017-04-11 17:27:29", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Mail": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" + }, + { + "name": "Richard Heyes", + "email": "richard@phpguru.org", + "role": "Developer" + }, + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Developer" + } + ], + "description": "Class that provides multiple interfaces for sending emails.", + "homepage": "http://pear.php.net/package/Mail" } ] diff --git a/lib/composer/vendor/consolidation/annotated-command/.travis.yml b/lib/composer/vendor/consolidation/annotated-command/.travis.yml index 0966ef0d..69a43a4f 100644 --- a/lib/composer/vendor/consolidation/annotated-command/.travis.yml +++ b/lib/composer/vendor/consolidation/annotated-command/.travis.yml @@ -4,16 +4,23 @@ branches: # Only test the master branch and SemVer tags. only: - master - - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ + - '/^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/' matrix: include: - - php: 7.0 - env: dependencies=highest - - php: 5.6 - - php: 5.5 - - php: 5.4 - env: dependencies=lowest + - + php: 7.1 + env: 'HIGHEST_LOWEST="update" STABILITY="RC"' + - + php: 7.0.11 + env: DO_POST_BUILD_ACTIONS=1 + - + php: 5.6 + - + php: 5.5 + - + php: 5.4 + env: 'HIGHEST_LOWEST="update --prefer-lowest"' sudo: false @@ -22,13 +29,71 @@ cache: - $HOME/.composer/cache before_script: - - if [ -z "$dependencies" ]; then composer install --prefer-dist; fi; - - if [ "$dependencies" = "lowest" ]; then composer update --prefer-dist --prefer-lowest -n; fi; - - if [ "$dependencies" = "highest" ]; then composer update --prefer-dist -n; fi; + # If running a highest/lowest dependencies test, get rid of composer.lock + - | + if [ -n "$HIGHEST_LOWEST" ] ; then + rm composer.lock + composer config --unset platform.php + composer config minimum-stability ${STABILITY-stable} + fi + - 'composer -n ${HIGHEST_LOWEST-install} --prefer-dist' + - composer why symfony/console + # Print out all of the installed packages in alphabetical order, with versions + - composer licenses script: - vendor/bin/phpunit - - vendor/bin/phpcs --standard=PSR2 -n src + - 'vendor/bin/phpcs --standard=PSR2 -n src' after_success: - - travis_retry php vendor/bin/coveralls -v + - 'travis_retry php vendor/bin/coveralls -v' + - | + # Only do post-build actions in one environment, and only if there is a GITHUB token. + if [ -z "$DO_POST_BUILD_ACTIONS" ] ; then + return + fi + if [ -z "$GITHUB_TOKEN" ]; then + echo "No GITHUB_TOKEN defined; exiting." + return + fi + ### + # Run composer lock update on cron jobs. + # See: https://github.com/danielbachhuber/composer-lock-updater + ### + if [ "$TRAVIS_EVENT_TYPE" != "cron" ] ; then + echo "Not a cron job; exiting." + return + fi + ### + # Only run on one job of a master branch build + ### + if [ "master" != "$TRAVIS_BRANCH" ] ; then + echo "composer.lock update only runs on the master branch." + return + fi + ### + # Install composer-lock-updater + ### + export PATH="$HOME/.composer/vendor/bin:$PATH" + composer global require danielbachhuber/composer-lock-updater + ### + # Optional: install Sensio Labs security checker to include security advisories in PR comments + ### + mkdir -p $HOME/bin + wget -O $HOME/bin/security-checker.phar http://get.sensiolabs.org/security-checker.phar + chmod +x $HOME/bin/security-checker.phar + export PATH="$HOME/bin:$PATH" + ### + # Install hub for creating GitHub pull requests + ### + wget -O hub.tgz https://github.com/github/hub/releases/download/v2.2.9/hub-linux-amd64-2.2.9.tgz + tar -zxvf hub.tgz + export PATH=$PATH:$PWD/hub-linux-amd64-2.2.9/bin/ + ### + # Run composer-lock-updater + ### + clu + + + + diff --git a/lib/composer/vendor/consolidation/annotated-command/CHANGELOG.md b/lib/composer/vendor/consolidation/annotated-command/CHANGELOG.md index 7a03b967..34875a3c 100644 --- a/lib/composer/vendor/consolidation/annotated-command/CHANGELOG.md +++ b/lib/composer/vendor/consolidation/annotated-command/CHANGELOG.md @@ -1,8 +1,105 @@ # Change Log +### 2.8.2 - 29 Nov 2017 -### 2.0.1 ~ 2.0.3 - 14 November 2016 +- Allow Symfony 4 components. +### 2.8.1 - 16 Oct 2017 + +- Add hook methods to allow Symfony command events to be added directly to the hook manager, givig better control of hook order. (#131) + +### 2.8.0 - 13 Oct 2017 + +- Remove phpdocumentor/reflection-docblock in favor of using a bespoke parser (#130) + +### 2.7.0 - 18 Sept 2017 + +- Add support for options with a default value of 'true' (#119) +- BUGFIX: Improve handling of options with optional values, which previously was not working correctly. (#118) + +### 2.6.1 - 18 Sep 2017 + +- Reverts to contents of the 2.4.13 release. + +### 2.5.0 & 2.5.1 - 17 Sep 2017 + +- BACKED OUT. These releases accidentally introduced breaking changes. + +### 2.4.13 - 28 Aug 2017 + +- Add a followLinks() method (#108) + +### 2.4.12 - 24 Aug 2017 + +- BUGFIX: Allow annotated commands to directly use InputInterface and OutputInterface (#106) + +### 2.4.11 - 27 July 2017 + +- Back out #102: do not change behavior of word wrap based on STDOUT redirection. + +### 2.4.10 - 21 July 2017 + +- Add a method CommandProcessor::setPassExceptions() to allow applicationsto prevent the command processor from catching exceptions thrown by command methods and hooks. (#103) + +### 2.4.9 - 20 Jul 2017 + +- Automatically disable wordwrap when the terminal is not connected to STDOUT (#102) + +### 2.4.8 - 3 Apr 2017 + +- Allow multiple annotations with the same key. These are returned as a csv, or, alternately, can be accessed as an array via the new accessor. +- Unprotect two methods for benefit of Drush help. (#99) +- BUGFIX: Remove symfony/console pin (#100) + +### 2.4.7 & 2.4.6 - 17 Mar 2017 + +- Avoid wrapping help text (#93) +- Pin symfony/console to version < 3.2.5 (#94) +- Add getExampleUsages() to AnnotatedCommand. (#92) + +### 2.4.5 - 28 Feb 2017 + +- Ensure that placeholder entries are written into the commandfile cache. (#86) + +### 2.4.4 - 27 Feb 2017 + +- BUGFIX: Avoid rewriting the command cache unless something has changed. +- BUGFIX: Ensure that the default value of options are correctly cached. + +### 2.4.2 - 24 Feb 2017 + +- Add SimpleCacheInterface as a documentation interface (not enforced). + +### 2.4.1 - 20 Feb 2017 + +- Support array options: multiple options on the commandline may be passed in to options array as an array of values. +- Add php 7.1 to the test matrix. + +### 2.4.0 - 3 Feb 2017 + +- Automatically rebuild cached commandfile data when commandfile changes. +- Provide path to command file in AnnotationData objects. +- Bugfix: Add dynamic options when user runs '--help my:command' (previously, only 'help my:command' worked). +- Bugfix: Include description of last parameter in help (was omitted if no options present) +- Add Windows testing with Appveyor + + +### 2.3.0 - 19 Jan 2017 + +- Add a command info cache to improve performance of applications with many commands +- Bugfix: Allow trailing backslashes in namespaces in CommandFileDiscovery +- Bugfix: Rename @topic to @topics + + +### 2.2.0 - 23 November 2016 + +- Support custom events +- Add xml and json output for replacement help command. Text / html format for replacement help command not available yet. + + +### 2.1.0 - 14 November 2016 + +- Add support for output formatter wordwrapping - Fix version requirement for output-formatters in composer.json - Use output-formatters ~3 - Move php_codesniffer back to require-dev (moved to require by mistake) diff --git a/lib/composer/vendor/consolidation/annotated-command/README.md b/lib/composer/vendor/consolidation/annotated-command/README.md index 9e6d7728..56697919 100644 --- a/lib/composer/vendor/consolidation/annotated-command/README.md +++ b/lib/composer/vendor/consolidation/annotated-command/README.md @@ -2,7 +2,11 @@ Initialize Symfony Console commands from annotated command class methods. -[![Travis CI](https://travis-ci.org/consolidation/annotated-command.svg?branch=master)](https://travis-ci.org/consolidation/annotated-command) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/annotated-command/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/annotated-command/?branch=master) [![Coverage Status](https://coveralls.io/repos/github/consolidation/annotated-command/badge.svg?branch=master)](https://coveralls.io/github/consolidation/annotated-command?branch=master) [![License](https://poser.pugx.org/consolidation/annotated-command/license)](https://packagist.org/packages/consolidation/annotated-command) +[![Travis CI](https://travis-ci.org/consolidation/annotated-command.svg?branch=master)](https://travis-ci.org/consolidation/annotated-command) +[![Windows CI](https://ci.appveyor.com/api/projects/status/c2c4lcf43ux4c30p?svg=true)](https://ci.appveyor.com/project/greg-1-anderson/annotated-command) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/annotated-command/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/annotated-command/?branch=master) +[![Coverage Status](https://coveralls.io/repos/github/consolidation/annotated-command/badge.svg?branch=master)](https://coveralls.io/github/consolidation/annotated-command?branch=master) +[![License](https://poser.pugx.org/consolidation/annotated-command/license)](https://packagist.org/packages/consolidation/annotated-command) ## Component Status @@ -47,6 +51,7 @@ class MyCommandClass * @command my:cat * @param integer $one The first parameter. * @param integer $two The other parameter. + * @option arr An option that takes multiple values. * @option flip Whether or not the second parameter should come first in the result. * @aliases c * @usage bet alpha --flip @@ -61,30 +66,92 @@ class MyCommandClass } } ``` +## Option Default Values + +The `$options` array must be an associative array whose key is the name of the option, and whose value is one of: + +- The boolean value `false`, which indicates that the option takes no value. +- A **string** containing the default value for options that may be provided a value, but are not required to. +- The special value InputOption::VALUE_REQUIRED, which indicates that the user must provide a value for the option whenever it is used. +- The special value InputOption::VALUE_OPTIONAL, which produces the following behavior: + - If the option is given a value (e.g. `--foo=bar`), then the value will be a string. + - If the option exists on the commandline, but has no value (e.g. `--foo`), then the value will be `true`. + - If the option does not exist on the commandline at all, then the value will be `null`. + - If the user explicitly sets `--foo=0`, then the value will be converted to `false`. + - LIMITATION: If any Input object other than ArgvInput (or a subclass thereof) is used, then the value will be `null` for both the no-value case (`--foo`) and the no-option case. When using a StringInput, use `--foo=1` instead of `--foo` to avoid this problem. +- The special value `true` produces the following behavior: + - If the option is given a value (e.g. `--foo=bar`), then the value will be a string. + - If the option exists on the commandline, but has no value (e.g. `--foo`), then the value will be `true`. + - If the option does not exist on the commandline at all, then the value will also be `true`. + - If the user explicitly sets `--foo=0`, then the value will be converted to `false`. + - If the user adds `--no-foo` on the commandline, then the value of `foo` will be `false`. +- An empty array, which indicates that the option may appear multiple times on the command line. + +No other values should be used for the default value. For example, `$options = ['a' => 1]` is **incorrect**; instead, use `$options = ['a' => '1']`. + +Default values for options may also be provided via the `@default` annotation. See hook alter, below. + ## Hooks Commandfiles may provide hooks in addition to commands. A commandfile method that contains a @hook annotation is registered as a hook instead of a command. The format of the hook annotation is: ``` -@hook type commandname|annotation +@hook type target ``` -The commandname may be the command's primary name (e.g. `my:command`), it's method name (e.g. myCommand) or any of its aliases. +The hook **type** determines when during the command lifecycle this hook will be called. The available hook types are described in detail below. -If an annotation is given instead, then this hook function will run for all commands with the specified annotation. +The hook **target** specifies which command or commands the hook will be attached to. There are several different ways to specify the hook target. -There are ten types of hooks supported: +- The command's primary name (e.g. `my:command`) or the command's method name (e.g. myCommand) will attach the hook to only that command. +- An annotation (e.g. `@foo`) will attach the hook to any command that is annotated with the given label. +- If the target is omitted, then the hook will be attached to every command defined in the same class as the hook implementation. -- Command Event (Symfony) -- Option -- Initialize (Symfony) -- Interact (Symfony) -- Validate -- Command -- Process -- Alter -- Status -- Extract +There are ten types of hooks in the command processing request flow: -Most of these also have "pre" and "post" varieties, to give more flexibility vis-a-vis hook ordering (and for consistency). Note that many validate, process and alter hooks may run, but the first status or extract hook that successfully returns a result will halt processing of further hooks of the same type. +- [Command Event](#command-event-hook) (Symfony) + - @pre-command-event + - @command-event + - @post-command-event +- [Option](#option-event-hook) + - @pre-option + - @option + - @post-option +- [Initialize](#initialize-hook) (Symfony) + - @pre-init + - @init + - @post-init +- [Interact](#interact-hook) (Symfony) + - @pre-interact + - @interact + - @post-interact +- [Validate](#validate-hook) + - @pre-validate + - @validate + - @post-validate +- [Command](#command-hook) + - @pre-command + - @command + - @command-init +- [Process](#process-hook) + - @pre-process + - @process + - @post-process +- [Alter](#alter-hook) + - @pre-alter + - @alter + - @post-alter +- [Status](#status-hook) + - @status +- [Extract](#extract-hook) + - @extract + +In addition to these, there are two more hooks available: + +- [On-event](#on-event-hook) + - @on-event +- [Replace Command](#replace-command-hook) + - @replace-command + +The "pre" and "post" varieties of these hooks, where avalable, give more flexibility vis-a-vis hook ordering (and for consistency). Within one type of hook, the running order is undefined and not guaranteed. Note that many validate, process and alter hooks may run, but the first status or extract hook that successfully returns a result will halt processing of further hooks of the same type. Each hook has an interface that defines its calling conventions; however, any callable may be used when registering a hook, which is convenient if versions of PHP prior to 7.0 (with no anonymous classes) need to be supported. @@ -94,15 +161,70 @@ The command-event hook is called via the Symfony Console command event notificat ### Option Event Hook -The option event hook ([OptionHookInterface](src/Hooks/OptionHookInterface.php)) is called for a specific command, whenever it is executed, or its help command is called. Any additional options for the command may be added here by instantiating and returnng an InputOption array. +The option event hook ([OptionHookInterface](src/Hooks/OptionHookInterface.php)) is called for a specific command, whenever it is executed, or its help command is called. Any additional options for the command may be added here by calling the `addOption` method of the provided `$command` object. Note that the option hook is only necessary for calculating dynamic options. Static options may be added via the @option annotation on any hook that uses them. See the [Alter Hook](https://github.com/consolidation/annotated-command#alter-hook) documentation below for an example. +``` +use Consolidation\AnnotatedCommand\AnnotationData; +use Symfony\Component\Console\Command\Command; + +/** + * @hook option some:command + */ +public function additionalOption(Command $command, AnnotationData $annotationData) +{ + $command->addOption( + 'dynamic', + '', + InputOption::VALUE_NONE, + 'Option added by @hook option some:command' + ); +} +``` ### Initialize Hook The initialize hook ([InitializeHookInterface](src/Hooks/InitializeHookInterface.php)) runs prior to the interact hook. It may supply command arguments and options from a configuration file or other sources. It should never do any user interaction. +The [consolidation/config](https://github.com/consolidation/config) project (which is used in [Robo PHP](https://github.com/consolidation/robo)) uses `@hook init` to automatically inject values from `config.yml` configuration files for options that were not provided on the command line. +``` +use Consolidation\AnnotatedCommand\AnnotationData; +use Symfony\Component\Console\Input\InputInterface; + +/** + * @hook init some:command + */ +public function initSomeCommand(InputInterface $input, AnnotationData $annotationData) +{ + $value = $input->getOption('some-option'); + if (!$value) { + $input->setOption('some-option', $this->generateRandomOptionValue()); + } +} +``` + ### Interact Hook -The interact hook ([InteractorInterface](src/Hooks/InteractorInterface.php)) runs prior to argument and option validation. Required arguments and options not supplied on the command line may be provided during this phase by prompting the user. Note that the interact hook is not called if the --no-interaction flag is supplied, whereas the command-event hook and the inject-configuration hook are. +The interact hook ([InteractorInterface](src/Hooks/InteractorInterface.php)) runs prior to argument and option validation. Required arguments and options not supplied on the command line may be provided during this phase by prompting the user. Note that the interact hook is not called if the --no-interaction flag is supplied, whereas the command-event hook and the init hook are. +``` +use Consolidation\AnnotatedCommand\AnnotationData; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; + +/** + * @hook interact some:command + */ +public function interact(InputInterface $input, OutputInterface $output, AnnotationData $annotationData) +{ + $io = new SymfonyStyle($input, $output); + + // If the user did not specify a password, then prompt for one. + $password = $input->getOption('password'); + if (empty($password)) { + $password = $io->askHidden("Enter a password:", function ($value) { return $value; }); + $input->setOption('password', $password); + } +} +``` ### Validate Hook @@ -114,24 +236,112 @@ The purpose of the validate hook ([ValidatorInterface](src/Hooks/ValidatorInterf - Return false. Message is empty, and status is 1. Deprecated. The validate hook may change the arguments and options of the command by modifying the Input object in the provided CommandData parameter. Any number of validation hooks may run, but if any fails, then execution of the command stops. +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * @hook validate some:command + */ +public function validatePassword(CommandData $commandData) +{ + $input = $commandData->input(); + $password = $input->getOption('password'); + + if (strpbrk($password, '!;$`') === false) { + throw new \Exception("Your password MUST contain at least one of the characters ! ; ` or $, for no rational reason whatsoever."); + } +} +``` ### Command Hook The command hook is provided for semantic purposes. The pre-command and command hooks are equivalent to the post-validate hook, and should confirm to the interface ([ValidatorInterface](src/Hooks/ValidatorInterface.php)). All of the post-validate hooks will be called before the first pre-command hook is called. Similarly, the post-command hook is equivalent to the pre-process hook, and should implement the interface ([ProcessResultInterface](src/Hooks/ProcessResultInterface.php)). The command callback itself (the method annotated @command) is called after the last command hook, and prior to the first post-command hook. +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * @hook pre-command some:command + */ +public function preCommand(CommandData $commandData) +{ + // Do something before some:command +} + +/** + * @hook post-command some:command + */ +public function postCommand($result, CommandData $commandData) +{ + // Do something after some:command +} +``` ### Process Hook -The process hook ([ProcessResultInterface](src/Hooks/ProcessResultInterface.php)) is specifically designed to convert a series of processing instructions into a final result. An example of this is implemented in Robo; if a Robo command returns a TaskInterface, then a Robo process hook will execute the task and return the result. This allows a pre-process hook to alter the task, e.g. by adding more operations to a task collection. +The process hook ([ProcessResultInterface](src/Hooks/ProcessResultInterface.php)) is specifically designed to convert a series of processing instructions into a final result. An example of this is implemented in Robo in the [CollectionProcessHook](https://github.com/consolidation/Robo/blob/master/src/Collection/CollectionProcessHook.php) class; if a Robo command returns a TaskInterface, then a Robo process hook will execute the task and return the result. This allows a pre-process hook to alter the task, e.g. by adding more operations to a task collection. The process hook should not be used for other purposes. +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * @hook process some:command + */ +public function process($result, CommandData $commandData) +{ + if ($result instanceof MyInterimType) { + $result = $this->convertInterimResult($result); + } +} +``` ### Alter Hook An alter hook ([AlterResultInterface](src/Hooks/AlterResultInterface.php)) changes the result object. Alter hooks should only operate on result objects of a type they explicitly recognize. They may return an object of the same type, or they may convert the object to some other type. If something goes wrong, and the alter hooks wishes to force the command to fail, then it may either return a CommandError object, or throw an exception. +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * Demonstrate an alter hook with an option + * + * @hook alter some:command + * @option $alteration Alter the result of the command in some way. + * @usage some:command --alteration + */ +public function alterSomeCommand($result, CommandData $commandData) +{ + if ($commandData->input()->getOption('alteration')) { + $result[] = $this->getOneMoreRow(); + } + + return $result; +} +``` + +If an option needs to be provided with a default value, that may be done via the `@default` annotation. + +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * Demonstrate an alter hook with an option that has a default value + * + * @hook alter some:command + * @option $name Give the result a name. + * @default $name George + * @usage some:command --name=George + */ +public function nameSomeCommand($result, CommandData $commandData) +{ + $result['name'] = $commandData->input()->getOption('name') + + return $result; +} +``` ### Status Hook @@ -145,6 +355,59 @@ The extract hook ([ExtractOutputInterface](src/Hooks/ExtractOutputInterface.php) If no extract hook returns any data, then the result object itself is printed if it is a string; otherwise, no output is emitted (other than any produced by the command itself). +### On-Event hook + +Commands can define their own custom events; to do so, they need only implement the CustomEventAwareInterface, and use the CustomEventAwareTrait. Event handlers for each custom event can then be defined using the on-event hook. + +A handler using an on-event hook looks something like the following: +``` +/** + * @hook on-event custom-event + */ +public function handlerForCustomEvent(/* arbitrary parameters, as defined by custom-event */) +{ + // do the needful, return what custom-event expects +} +``` +Then, to utilize this in a command: +``` +class MyCommands implements CustomEventAwareInterface +{ + use CustomEventAwareTrait; + + /** + * @command my-command + */ + public myCommand($options = []) + { + $handlers = $this->getCustomEventHandlers('custom-event'); + // iterate and call $handlers + } +} +``` +It is up to the command that defines the custom event to declare what the expected parameters for the callback function should be, and what the return value is and how it should be used. + +### Replace Command Hook + +The replace-command ([ReplaceCommandHookInterface](src/Hooks/ReplaceCommandHookInterface.php)) hook permits you to replace a command's method with another method of your own. + +For instance, if you'd like to replace the `foo:bar` command, you could utilize the following code: + +```php + composer.lock' + +init: + #https://github.com/composer/composer/blob/master/appveyor.yml + #- SET ANSICON=121x90 (121x90) + +# Inspired by https://github.com/Codeception/base/blob/master/appveyor.yml and https://github.com/phpmd/phpmd/blob/master/appveyor.yml +install: + - cinst -y curl + - SET PATH=C:\Program Files\curl;%PATH% + #which is only needed by the test suite. + - cinst -y which + - SET PATH=C:\Program Files\which;%PATH% + - git clone -q https://github.com/acquia/DevDesktopCommon.git #For tar, cksum, ... + - SET PATH=%APPVEYOR_BUILD_FOLDER%/DevDesktopCommon/bintools-win/msys/bin;%PATH% + - SET PATH=C:\Program Files\MySql\MySQL Server 5.7\bin\;%PATH% + #Install PHP per https://blog.wyrihaximus.net/2016/11/running-php-unit-tests-on-windows-using-appveyor-and-chocolatey/ + - ps: appveyor-retry cinst --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $Env:php_ver_target | Select-Object -first 1) -replace '[php|]','') + - cd c:\tools\php70 + - copy php.ini-production php.ini + + - echo extension_dir=ext >> php.ini + - echo extension=php_openssl.dll >> php.ini + - echo date.timezone="UTC" >> php.ini + - echo variables_order="EGPCS" >> php.ini #May be unneeded. + - echo mbstring.http_input=pass >> php.ini + - echo mbstring.http_output=pass >> php.ini + - echo sendmail_path=nul >> php.ini + - echo extension=php_mbstring.dll >> php.ini + - echo extension=php_curl.dll >> php.ini + - echo extension=php_pdo_mysql.dll >> php.ini + - echo extension=php_pdo_pgsql.dll >> php.ini + - echo extension=php_pdo_sqlite.dll >> php.ini + - echo extension=php_pgsql.dll >> php.ini + - echo extension=php_gd2.dll >> php.ini + - SET PATH=C:\tools\php70;%PATH% + #Install Composer + - cd %APPVEYOR_BUILD_FOLDER% + #- appveyor DownloadFile https://getcomposer.org/composer.phar + - php -r "readfile('http://getcomposer.org/installer');" | php + #Install dependencies via Composer + - php composer.phar -q install --prefer-dist -n + - SET PATH=%APPVEYOR_BUILD_FOLDER%;%APPVEYOR_BUILD_FOLDER%/vendor/bin;%PATH% + #Create a sandbox for testing. Don't think we need this. + - mkdir c:\test_temp + +test_script: + - phpunit + - php composer.phar cs + +# environment variables +environment: + global: + SHELL_INTERACTIVE: true + php_ver_target: 7.0 + diff --git a/lib/composer/vendor/consolidation/annotated-command/composer.json b/lib/composer/vendor/consolidation/annotated-command/composer.json index 9132e750..df450dd5 100644 --- a/lib/composer/vendor/consolidation/annotated-command/composer.json +++ b/lib/composer/vendor/consolidation/annotated-command/composer.json @@ -20,18 +20,25 @@ }, "require": { "php": ">=5.4.0", - "consolidation/output-formatters": "^3.1.3", - "psr/log": "~1", - "symfony/console": "^2.8|~3", - "symfony/event-dispatcher": "^2.5|~3", - "symfony/finder": "^2.5|~3", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2" + "consolidation/output-formatters": "^3.1.12", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", "squizlabs/php_codesniffer": "^2.7" }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "platform": { + "php": "5.6" + } + }, "scripts": { "cs": "phpcs --standard=PSR2 -n src", "cbf": "phpcbf --standard=PSR2 -n src", diff --git a/lib/composer/vendor/consolidation/annotated-command/composer.lock b/lib/composer/vendor/consolidation/annotated-command/composer.lock index fc3a9760..6a7cec4c 100644 --- a/lib/composer/vendor/consolidation/annotated-command/composer.lock +++ b/lib/composer/vendor/consolidation/annotated-command/composer.lock @@ -4,38 +4,37 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "3022aec17694795060ac3d71280fbc23", - "content-hash": "3053742fe70568ac2d3264b50fad5a41", + "content-hash": "0a26ebe5250ce150e1e8cbafec298926", "packages": [ { "name": "consolidation/output-formatters", - "version": "3.1.3", + "version": "3.1.13", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4" + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/1e6c6ab49904a31c310940ec4efccf5f36e386e4", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", "shasum": "" }, "require": { "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -54,153 +53,7 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2016-11-18 23:04:31" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "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": "2015-12-27 11:43:31" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" - }, - "type": "library", - "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": "2016-09-30 07:12:33" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "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": "2016-06-10 07:14:17" + "time": "2017-11-29T15:25:38+00:00" }, { "name": "psr/log", @@ -247,41 +100,48 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "symfony/console", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065" + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c99da1119ae61e15de0e4829196b9fba6f73d065", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065", + "url": "https://api.github.com/repos/symfony/console/zipball/63cd7960a0a522c3537f6326706d7f3b8de65805", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/debug": "~2.8|~3.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, "require-dev": { "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", "symfony/process": "~2.8|~3.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/filesystem": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -308,37 +168,36 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-10-06 01:44:51" + "time": "2017-11-16T15:24:32+00:00" }, { "name": "symfony/debug", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" + "reference": "74557880e2846b5c84029faa96b834da37e29810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "url": "https://api.github.com/repos/symfony/debug/zipball/74557880e2846b5c84029faa96b834da37e29810", + "reference": "74557880e2846b5c84029faa96b834da37e29810", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", "symfony/http-kernel": "~2.8|~3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -365,29 +224,32 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2017-11-10T16:38:39+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc" + "reference": "271d8c27c3ec5ecee6e2ac06016232e249d638d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/271d8c27c3ec5ecee6e2ac06016232e249d638d9", + "reference": "271d8c27c3ec5ecee6e2ac06016232e249d638d9", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/expression-language": "~2.8|~3.0", "symfony/stopwatch": "~2.8|~3.0" }, @@ -398,7 +260,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -425,29 +287,29 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-10-13 06:28:43" + "time": "2017-11-05T15:47:03+00:00" }, { "name": "symfony/finder", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", + "url": "https://api.github.com/repos/symfony/finder/zipball/138af5ec075d4b1d1bd19de08c38a34bb2d7d880", + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -474,20 +336,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-09-28 00:11:12" + "time": "2017-11-05T15:47:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -499,7 +361,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -533,101 +395,7 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" - }, - { - "name": "victorjonsson/markdowndocs", - "version": "1.3.7", - "source": { - "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" - }, - "require-dev": { - "phpunit/phpunit": "3.7.23" - }, - "bin": [ - "bin/phpdoc-md" - ], - "type": "library", - "autoload": { - "psr-0": { - "PHPDocsMD": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" - } - ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", - "time": "2016-10-11 21:10:19" - }, - { - "name": "webmozart/assert", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", - "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.2-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": "2016-08-09 15:02:57" + "time": "2017-10-11T12:05:26+00:00" } ], "packages-dev": [ @@ -683,76 +451,166 @@ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "time": "2015-06-14T21:17:01+00:00" }, { - "name": "guzzle/guzzle", - "version": "v3.8.1", + "name": "guzzlehttp/guzzle", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba" + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "shasum": "" }, "require": { - "ext-curl": "*", - "php": ">=5.3.3", - "symfony/event-dispatcher": ">=2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" }, "require-dev": { - "doctrine/cache": "*", - "monolog/monolog": "1.*", - "phpunit/phpunit": "3.7.*", - "psr/log": "1.0.*", - "symfony/class-loader": "*", - "zendframework/zend-cache": "<2.3", - "zendframework/zend-log": "<2.3" + "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": "3.8-dev" + "dev-master": "6.2-dev" } }, "autoload": { - "psr-0": { - "Guzzle": "src/", - "Guzzle\\Tests": "tests/" + "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", @@ -760,52 +618,197 @@ "homepage": "https://github.com/mtdowling" }, { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", - "homepage": "http://guzzlephp.org/", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "client", - "curl", - "framework", "http", - "http client", - "rest", - "web service" + "message", + "request", + "response", + "stream", + "uri", + "url" ], - "abandoned": "guzzlehttp/guzzle", - "time": "2014-01-28 22:29:15" + "time": "2017-03-20T17:10:46+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.6.1", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "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": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "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-10T14:09:06+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", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.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.0" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -838,7 +841,7 @@ "spy", "stub" ], - "time": "2016-06-07 08:13:47" + "time": "2017-11-24T13:59:53+00:00" }, { "name": "phpunit/php-code-coverage", @@ -900,20 +903,20 @@ "testing", "xunit" ], - "time": "2015-10-06 15:47:00" + "time": "2015-10-06T15:47:00+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.1", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -947,7 +950,7 @@ "filesystem", "iterator" ], - "time": "2015-06-21 13:08:43" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -988,29 +991,34 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -1032,20 +1040,20 @@ "keywords": [ "timer" ], - "time": "2016-05-12 18:03:57" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "1.4.9", + "version": "1.4.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", "shasum": "" }, "require": { @@ -1081,20 +1089,20 @@ "keywords": [ "tokenizer" ], - "time": "2016-11-15 14:06:22" + "time": "2017-02-27T10:12:30+00:00" }, { "name": "phpunit/phpunit", - "version": "4.8.28", + "version": "4.8.36", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "558a3a0d28b4cb7e4a593a4fbd2220e787076225" + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/558a3a0d28b4cb7e4a593a4fbd2220e787076225", - "reference": "558a3a0d28b4cb7e4a593a4fbd2220e787076225", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", "shasum": "" }, "require": { @@ -1110,7 +1118,7 @@ "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", + "sebastian/comparator": "~1.2.2", "sebastian/diff": "~1.2", "sebastian/environment": "~1.3", "sebastian/exporter": "~1.2", @@ -1153,7 +1161,7 @@ "testing", "xunit" ], - "time": "2016-11-14 06:25:28" + "time": "2017-06-21T08:07:12+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -1209,32 +1217,85 @@ "mock", "xunit" ], - "time": "2015-10-02 06:51:40" + "time": "2015-10-02T06:51:40+00:00" }, { - "name": "satooshi/php-coveralls", - "version": "v1.0.1", + "name": "psr/http-message", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/satooshi/php-coveralls.git", - "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c" + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/da51d304fe8622bf9a6da39a8446e7afd432115c", - "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c", + "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": "satooshi/php-coveralls", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", "shasum": "" }, "require": { "ext-json": "*", "ext-simplexml": "*", - "guzzle/guzzle": "^2.8|^3.0", - "php": ">=5.3.3", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", "psr/log": "^1.0", - "symfony/config": "^2.1|^3.0", - "symfony/console": "^2.1|^3.0", - "symfony/stopwatch": "^2.0|^3.0", - "symfony/yaml": "^2.0|^3.0" + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" }, "suggest": { "symfony/http-kernel": "Allows Symfony integration" @@ -1243,9 +1304,14 @@ "bin/coveralls" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { "psr-4": { - "Satooshi\\": "src/Satooshi/" + "PhpCoveralls\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1256,37 +1322,54 @@ { "name": "Kitamura Satoshi", "email": "with.no.parachute@gmail.com", - "homepage": "https://www.facebook.com/satooshi.jp" + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" } ], "description": "PHP client library for Coveralls API", - "homepage": "https://github.com/satooshi/php-coveralls", + "homepage": "https://github.com/php-coveralls/php-coveralls", "keywords": [ "ci", "coverage", "github", "test" ], - "time": "2016-01-20 17:35:46" + "time": "2017-10-14T23:16:28+00:00" }, { "name": "sebastian/comparator", - "version": "1.2.1", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "ce2bda23a56456f19e35d98241446b581f648c14" + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ce2bda23a56456f19e35d98241446b581f648c14", - "reference": "ce2bda23a56456f19e35d98241446b581f648c14", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "sebastian/exporter": "~1.2 || ~2.0" }, "require-dev": { "phpunit/phpunit": "~4.4" @@ -1331,27 +1414,27 @@ "compare", "equality" ], - "time": "2016-11-17 14:39:37" + "time": "2017-01-29T09:50:25+00:00" }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { @@ -1383,7 +1466,7 @@ "keywords": [ "diff" ], - "time": "2015-12-08 07:14:41" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -1433,7 +1516,7 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2016-08-18T05:49:44+00:00" }, { "name": "sebastian/exporter", @@ -1500,7 +1583,7 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2016-06-17T09:04:28+00:00" }, { "name": "sebastian/global-state", @@ -1551,20 +1634,20 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "time": "2015-10-12T03:26:01+00:00" }, { "name": "sebastian/recursion-context", - "version": "1.0.4", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e" + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/938df7a6478e72795e5f8266cff24d06e3136f2e", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", "shasum": "" }, "require": { @@ -1604,7 +1687,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-15 06:55:36" + "time": "2016-10-03T07:41:43+00:00" }, { "name": "sebastian/version", @@ -1639,20 +1722,20 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" + "time": "2015-06-21T13:59:46+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "2.7.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed" + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", - "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", "shasum": "" }, "require": { @@ -1717,33 +1800,42 @@ "phpcs", "standards" ], - "time": "2016-09-01 23:53:02" + "time": "2017-05-22T02:43:20+00:00" }, { "name": "symfony/config", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "949e7e846743a7f9e46dc50eb639d5fde1f53341" + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/949e7e846743a7f9e46dc50eb639d5fde1f53341", - "reference": "949e7e846743a7f9e46dc50eb639d5fde1f53341", + "url": "https://api.github.com/repos/symfony/config/zipball/8d2649077dc54dfbaf521d31f217383d82303c5f", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/filesystem": "~2.8|~3.0" }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3", + "symfony/finder": "~3.3", + "symfony/yaml": "~3.0" + }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1770,29 +1862,29 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2016-09-25 08:27:07" + "time": "2017-11-07T14:16:22+00:00" }, { "name": "symfony/filesystem", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6" + "reference": "77db266766b54db3ee982fe51868328b887ce15c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0565b61bf098cb4dc09f4f103f033138ae4f42c6", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/77db266766b54db3ee982fe51868328b887ce15c", + "reference": "77db266766b54db3ee982fe51868328b887ce15c", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1819,29 +1911,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-10-18 04:30:12" + "time": "2017-11-07T14:12:55+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1" + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/bb42806b12c5f89db4ebf64af6741afe6d8457e1", - "reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1868,29 +1960,35 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" + "time": "2017-11-10T19:02:53+00:00" }, { "name": "symfony/yaml", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27" + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0938408c4faa518d95230deabb5f595bf0de31b9", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1917,16 +2015,71 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-10-24 18:41:13" + "time": "2017-11-10T18:26:04+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "2016-11-23T20:04:58+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "satooshi/php-coveralls": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { "php": ">=5.4.0" }, - "platform-dev": [] + "platform-dev": [], + "platform-overrides": { + "php": "5.6" + } } diff --git a/lib/composer/vendor/consolidation/annotated-command/infection.json.dist b/lib/composer/vendor/consolidation/annotated-command/infection.json.dist new file mode 100644 index 00000000..b883a216 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/infection.json.dist @@ -0,0 +1,11 @@ +{ + "timeout": 10, + "source": { + "directories": [ + "src" + ] + }, + "logs": { + "text": "infection-log.txt" + } +} \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommand.php b/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommand.php index 8db1e73e..41be53a9 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommand.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommand.php @@ -3,8 +3,7 @@ namespace Consolidation\AnnotatedCommand; use Consolidation\AnnotatedCommand\Hooks\HookManager; use Consolidation\AnnotatedCommand\Parser\CommandInfo; -use Consolidation\OutputFormatters\FormatterManager; -use Consolidation\OutputFormatters\Options\FormatterOptions; +use Consolidation\AnnotatedCommand\Help\HelpDocumentAlter; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -26,11 +25,13 @@ use Symfony\Component\Console\Output\OutputInterface; * * @package Consolidation\AnnotatedCommand */ -class AnnotatedCommand extends Command +class AnnotatedCommand extends Command implements HelpDocumentAlter { protected $commandCallback; protected $commandProcessor; protected $annotationData; + protected $examples = []; + protected $topics = []; protected $usesInputInterface; protected $usesOutputInterface; protected $returnType; @@ -46,7 +47,7 @@ class AnnotatedCommand extends Command // AnnotatedCommand. Alternately, we break out a new subclass. // The command factory instantiates the subclass. if (get_class($this) != 'Consolidation\AnnotatedCommand\AnnotatedCommand') { - $commandInfo = new CommandInfo($this, 'execute'); + $commandInfo = CommandInfo::create($this, 'execute'); if (!isset($name)) { $name = $commandInfo->getName(); } @@ -106,21 +107,114 @@ class AnnotatedCommand extends Command return $this; } + public function getTopics() + { + return $this->topics; + } + + public function setTopics($topics) + { + $this->topics = $topics; + return $this; + } + public function setCommandInfo($commandInfo) { $this->setDescription($commandInfo->getDescription()); $this->setHelp($commandInfo->getHelp()); $this->setAliases($commandInfo->getAliases()); $this->setAnnotationData($commandInfo->getAnnotations()); + $this->setTopics($commandInfo->getTopics()); foreach ($commandInfo->getExampleUsages() as $usage => $description) { - // Symfony Console does not support attaching a description to a usage - $this->addUsage($usage); + $this->addUsageOrExample($usage, $description); } $this->setCommandArguments($commandInfo); $this->setReturnType($commandInfo->getReturnType()); + // Hidden commands available since Symfony 3.2 + // http://symfony.com/doc/current/console/hide_commands.html + if (method_exists($this, 'setHidden')) { + $this->setHidden($commandInfo->getHidden()); + } return $this; } + public function getExampleUsages() + { + return $this->examples; + } + + protected function addUsageOrExample($usage, $description) + { + $this->addUsage($usage); + if (!empty($description)) { + $this->examples[$usage] = $description; + } + } + + public function helpAlter(\DomDocument $originalDom) + { + $dom = new \DOMDocument('1.0', 'UTF-8'); + $dom->appendChild($commandXML = $dom->createElement('command')); + $commandXML->setAttribute('id', $this->getName()); + $commandXML->setAttribute('name', $this->getName()); + + // Get the original element and its top-level elements. + $originalCommandXML = $this->getSingleElementByTagName($dom, $originalDom, 'command'); + $originalUsagesXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'usages'); + $originalDescriptionXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'description'); + $originalHelpXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'help'); + $originalArgumentsXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'arguments'); + $originalOptionsXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'options'); + + // Keep only the first of the elements + $newUsagesXML = $dom->createElement('usages'); + $firstUsageXML = $this->getSingleElementByTagName($dom, $originalUsagesXML, 'usage'); + $newUsagesXML->appendChild($firstUsageXML); + + // Create our own elements + $newExamplesXML = $dom->createElement('examples'); + foreach ($this->examples as $usage => $description) { + $newExamplesXML->appendChild($exampleXML = $dom->createElement('example')); + $exampleXML->appendChild($usageXML = $dom->createElement('usage', $usage)); + $exampleXML->appendChild($descriptionXML = $dom->createElement('description', $description)); + } + + // Create our own elements + $newAliasesXML = $dom->createElement('aliases'); + foreach ($this->getAliases() as $alias) { + $newAliasesXML->appendChild($dom->createElement('alias', $alias)); + } + + // Create our own elements + $newTopicsXML = $dom->createElement('topics'); + foreach ($this->getTopics() as $topic) { + $newTopicsXML->appendChild($topicXML = $dom->createElement('topic', $topic)); + } + + // Place the different elements into the element in the desired order + $commandXML->appendChild($newUsagesXML); + $commandXML->appendChild($newExamplesXML); + $commandXML->appendChild($originalDescriptionXML); + $commandXML->appendChild($originalArgumentsXML); + $commandXML->appendChild($originalOptionsXML); + $commandXML->appendChild($originalHelpXML); + $commandXML->appendChild($newAliasesXML); + $commandXML->appendChild($newTopicsXML); + + return $dom; + } + + protected function getSingleElementByTagName($dom, $parent, $tagName) + { + // There should always be exactly one '' element. + $elements = $parent->getElementsByTagName($tagName); + $result = $elements->item(0); + + $result = $dom->importNode($result, true); + + return $result; + } + protected function setCommandArguments($commandInfo) { $this->setUsesInputInterface($commandInfo); @@ -134,8 +228,11 @@ class AnnotatedCommand extends Command */ protected function checkUsesInputInterface($params) { + /** @var \ReflectionParameter $firstParam */ $firstParam = reset($params); - return $firstParam instanceof InputInterface; + return $firstParam && $firstParam->getClass() && $firstParam->getClass()->implementsInterface( + '\\Symfony\\Component\\Console\\Input\\InputInterface' + ); } /** @@ -160,7 +257,11 @@ class AnnotatedCommand extends Command $index = $this->checkUsesInputInterface($params) ? 1 : 0; $this->usesOutputInterface = (count($params) > $index) && - ($params[$index] instanceof OutputInterface); + $params[$index]->getClass() && + $params[$index]->getClass()->implementsInterface( + '\\Symfony\\Component\\Console\\Output\\OutputInterface' + ) + ; return $this; } @@ -264,7 +365,7 @@ class AnnotatedCommand extends Command $this->addOptions($inputOptions); foreach ($commandInfo->getExampleUsages() as $usage => $description) { if (!in_array($usage, $this->getUsages())) { - $this->addUsage($usage); + $this->addUsageOrExample($usage, $description); } } } @@ -337,10 +438,15 @@ class AnnotatedCommand extends Command ); $commandData->setUseIOInterfaces( - $this->usesOutputInterface, - $this->usesInputInterface + $this->usesInputInterface, + $this->usesOutputInterface ); + // Allow the commandData to cache the list of options with + // special default values ('null' and 'true'), as these will + // need special handling. @see CommandData::options(). + $commandData->cacheSpecialDefaults($this->getDefinition()); + return $commandData; } } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommandFactory.php b/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommandFactory.php index 5765167f..abdd9727 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommandFactory.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommandFactory.php @@ -1,9 +1,14 @@ dataStore = new NullCache(); $this->commandProcessor = new CommandProcessor(new HookManager()); $this->addAutomaticOptionProvider($this); } @@ -92,6 +100,17 @@ class AnnotatedCommandFactory implements AutomaticOptionsProviderInterface public function addListener(CommandCreationListenerInterface $listener) { $this->listeners[] = $listener; + return $this; + } + + /** + * Add a listener that's just a simple 'callable'. + * @param callable $listener + */ + public function addListernerCallback(callable $listener) + { + $this->addListener(new CommandCreationListener($listener)); + return $this; } /** @@ -131,7 +150,95 @@ class AnnotatedCommandFactory implements AutomaticOptionsProviderInterface return $this->createCommandsFromClassInfo($commandInfoList, $commandFileInstance, $includeAllPublicMethods); } - public function getCommandInfoListFromClass($classNameOrInstance) + public function getCommandInfoListFromClass($commandFileInstance) + { + $cachedCommandInfoList = $this->getCommandInfoListFromCache($commandFileInstance); + $commandInfoList = $this->createCommandInfoListFromClass($commandFileInstance, $cachedCommandInfoList); + if (!empty($commandInfoList)) { + $cachedCommandInfoList = array_merge($commandInfoList, $cachedCommandInfoList); + $this->storeCommandInfoListInCache($commandFileInstance, $cachedCommandInfoList); + } + return $cachedCommandInfoList; + } + + protected function storeCommandInfoListInCache($commandFileInstance, $commandInfoList) + { + if (!$this->hasDataStore()) { + return; + } + $cache_data = []; + $serializer = new CommandInfoSerializer(); + foreach ($commandInfoList as $i => $commandInfo) { + $cache_data[$i] = $serializer->serialize($commandInfo); + } + $className = get_class($commandFileInstance); + $this->getDataStore()->set($className, $cache_data); + } + + /** + * Get the command info list from the cache + * + * @param mixed $commandFileInstance + * @return array + */ + protected function getCommandInfoListFromCache($commandFileInstance) + { + $commandInfoList = []; + $className = get_class($commandFileInstance); + if (!$this->getDataStore()->has($className)) { + return []; + } + $deserializer = new CommandInfoDeserializer(); + + $cache_data = $this->getDataStore()->get($className); + foreach ($cache_data as $i => $data) { + if (CommandInfoDeserializer::isValidSerializedData((array)$data)) { + $commandInfoList[$i] = $deserializer->deserialize((array)$data); + } + } + return $commandInfoList; + } + + /** + * Check to see if this factory has a cache datastore. + * @return boolean + */ + public function hasDataStore() + { + return !($this->dataStore instanceof NullCache); + } + + /** + * Set a cache datastore for this factory. Any object with 'set' and + * 'get' methods is acceptable. The key is the classname being cached, + * and the value is a nested associative array of strings. + * + * TODO: Typehint this to SimpleCacheInterface + * + * This is not done currently to allow clients to use a generic cache + * store that does not itself depend on the annotated-command library. + * + * @param Mixed $dataStore + * @return type + */ + public function setDataStore($dataStore) + { + if (!($dataStore instanceof SimpleCacheInterface)) { + $dataStore = new CacheWrapper($dataStore); + } + $this->dataStore = $dataStore; + return $this; + } + + /** + * Get the data store attached to this factory. + */ + public function getDataStore() + { + return $this->dataStore; + } + + protected function createCommandInfoListFromClass($classNameOrInstance, $cachedCommandInfoList) { $commandInfoList = []; @@ -139,13 +246,20 @@ class AnnotatedCommandFactory implements AutomaticOptionsProviderInterface // can never be commands. $commandMethodNames = array_filter( get_class_methods($classNameOrInstance) ?: [], - function ($m) { - return !preg_match('#^_#', $m); + function ($m) use ($classNameOrInstance) { + $reflectionMethod = new \ReflectionMethod($classNameOrInstance, $m); + return !$reflectionMethod->isStatic() && !preg_match('#^_#', $m); } ); foreach ($commandMethodNames as $commandMethodName) { - $commandInfoList[] = new CommandInfo($classNameOrInstance, $commandMethodName); + if (!array_key_exists($commandMethodName, $cachedCommandInfoList)) { + $commandInfo = CommandInfo::create($classNameOrInstance, $commandMethodName); + if (!static::isCommandOrHookMethod($commandInfo, $this->getIncludeAllPublicMethods())) { + $commandInfo->invalidate(); + } + $commandInfoList[$commandMethodName] = $commandInfo; + } } return $commandInfoList; @@ -153,7 +267,7 @@ class AnnotatedCommandFactory implements AutomaticOptionsProviderInterface public function createCommandInfo($classNameOrInstance, $commandMethodName) { - return new CommandInfo($classNameOrInstance, $commandMethodName); + return CommandInfo::create($classNameOrInstance, $commandMethodName); } public function createCommandsFromClassInfo($commandInfoList, $commandFileInstance, $includeAllPublicMethods = null) @@ -173,28 +287,45 @@ class AnnotatedCommandFactory implements AutomaticOptionsProviderInterface public function createSelectedCommandsFromClassInfo($commandInfoList, $commandFileInstance, callable $commandSelector) { - $commandList = []; + $commandInfoList = $this->filterCommandInfoList($commandInfoList, $commandSelector); + return array_map( + function ($commandInfo) use ($commandFileInstance) { + return $this->createCommand($commandInfo, $commandFileInstance); + }, + $commandInfoList + ); + } - foreach ($commandInfoList as $commandInfo) { - if ($commandSelector($commandInfo)) { - $command = $this->createCommand($commandInfo, $commandFileInstance); - $commandList[] = $command; - } - } + protected function filterCommandInfoList($commandInfoList, callable $commandSelector) + { + return array_filter($commandInfoList, $commandSelector); + } - return $commandList; + public static function isCommandOrHookMethod($commandInfo, $includeAllPublicMethods) + { + return static::isHookMethod($commandInfo) || static::isCommandMethod($commandInfo, $includeAllPublicMethods); + } + + public static function isHookMethod($commandInfo) + { + return $commandInfo->hasAnnotation('hook'); } public static function isCommandMethod($commandInfo, $includeAllPublicMethods) { // Ignore everything labeled @hook - if ($commandInfo->hasAnnotation('hook')) { + if (static::isHookMethod($commandInfo)) { return false; } // Include everything labeled @command if ($commandInfo->hasAnnotation('command')) { return true; } + // Skip anything that has a missing or invalid name. + $commandName = $commandInfo->getName(); + if (empty($commandName) || preg_match('#[^a-zA-Z0-9:_-]#', $commandName)) { + return false; + } // Skip anything named like an accessor ('get' or 'set') if (preg_match('#^(get[A-Z]|set[A-Z])#', $commandInfo->getMethodName())) { return false; @@ -207,7 +338,7 @@ class AnnotatedCommandFactory implements AutomaticOptionsProviderInterface public function registerCommandHooksFromClassInfo($commandInfoList, $commandFileInstance) { foreach ($commandInfoList as $commandInfo) { - if ($commandInfo->hasAnnotation('hook')) { + if (static::isHookMethod($commandInfo)) { $this->registerCommandHook($commandInfo, $commandFileInstance); } } @@ -236,7 +367,7 @@ class AnnotatedCommandFactory implements AutomaticOptionsProviderInterface public function registerCommandHook(CommandInfo $commandInfo, $commandFileInstance) { // Ignore if the command info has no @hook - if (!$commandInfo->hasAnnotation('hook')) { + if (!static::isHookMethod($commandInfo)) { return; } $hookData = $commandInfo->getAnnotation('hook'); diff --git a/lib/composer/vendor/consolidation/annotated-command/src/AnnotationData.php b/lib/composer/vendor/consolidation/annotated-command/src/AnnotationData.php index c5728ecd..0bcc8b29 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/AnnotationData.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/AnnotationData.php @@ -1,11 +1,18 @@ has($key) ? $this[$key] : $default; + return $this->has($key) ? CsvUtils::toString($this[$key]) : $default; + } + + public function getList($key, $default = []) + { + return $this->has($key) ? CsvUtils::toList($this[$key]) : $default; } public function has($key) diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Cache/CacheWrapper.php b/lib/composer/vendor/consolidation/annotated-command/src/Cache/CacheWrapper.php new file mode 100644 index 00000000..ed5a5eee --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Cache/CacheWrapper.php @@ -0,0 +1,49 @@ +dataStore = $dataStore; + } + + /** + * Test for an entry from the cache + * @param string $key + * @return boolean + */ + public function has($key) + { + if (method_exists($this->dataStore, 'has')) { + return $this->dataStore->has($key); + } + $test = $this->dataStore->get($key); + return !empty($test); + } + + /** + * Get an entry from the cache + * @param string $key + * @return array + */ + public function get($key) + { + return (array) $this->dataStore->get($key); + } + + /** + * Store an entry in the cache + * @param string $key + * @param array $data + */ + public function set($key, $data) + { + $this->dataStore->set($key, $data); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Cache/NullCache.php b/lib/composer/vendor/consolidation/annotated-command/src/Cache/NullCache.php new file mode 100644 index 00000000..22906b29 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Cache/NullCache.php @@ -0,0 +1,37 @@ +listener = $listener; + } + + public function notifyCommandFileAdded($command) + { + call_user_func($this->listener, $command); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/CommandData.php b/lib/composer/vendor/consolidation/annotated-command/src/CommandData.php index d1e61efc..b5f82430 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/CommandData.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/CommandData.php @@ -1,6 +1,7 @@ input->getOptions(); + // We cannot tell the difference between '--foo' (an option without + // a value) and the absence of '--foo' when the option has an optional + // value, and the current vallue of the option is 'null' using only + // the public methods of InputInterface. We'll try to figure out + // which is which by other means here. + $options = $this->getAdjustedOptions(); + + // Make two conversions here: + // --foo=0 wil convert $value from '0' to 'false' for binary options. + // --foo with $value of 'true' will be forced to 'false' if --no-foo exists. + foreach ($options as $option => $value) { + if ($this->shouldConvertOptionToFalse($options, $option, $value)) { + $options[$option] = false; + } + } + + return $options; + } + + /** + * Use 'hasParameterOption()' to attempt to disambiguate option states. + */ + protected function getAdjustedOptions() + { + $options = $this->input->getOptions(); + + // If Input isn't an ArgvInput, then return the options as-is. + if (!$this->input instanceof ArgvInput) { + return $options; + } + + // If we have an ArgvInput, then we can determine if options + // are missing from the command line. If the option value is + // missing from $input, then we will keep the value `null`. + // If it is present, but has no explicit value, then change it its + // value to `true`. + foreach ($options as $option => $value) { + if (($value === null) && ($this->input->hasParameterOption("--$option"))) { + $options[$option] = true; + } + } + + return $options; + } + + protected function shouldConvertOptionToFalse($options, $option, $value) + { + // If the value is 'true' (e.g. the option is '--foo'), then convert + // it to false if there is also an option '--no-foo'. n.b. if the + // commandline has '--foo=bar' then $value will not be 'true', and + // --no-foo will be ignored. + if ($value === true) { + // Check if the --no-* option exists. Note that none of the other + // alteration apply in the $value == true case, so we can exit early here. + $negation_key = 'no-' . $option; + return array_key_exists($negation_key, $options) && $options[$negation_key]; + } + + // If the option is '--foo=0', convert the '0' to 'false' when appropriate. + if ($value !== '0') { + return false; + } + + // The '--foo=0' convertion is only applicable when the default value + // is not in the special defaults list. i.e. you get a literal '0' + // when your default is a string. + return in_array($option, $this->specialDefaults); + } + + public function cacheSpecialDefaults($definition) + { + foreach ($definition->getOptions() as $option => $inputOption) { + $defaultValue = $inputOption->getDefault(); + if (($defaultValue === null) || ($defaultValue === true)) { + $this->specialDefaults[] = $option; + } + } } public function getArgsWithoutAppName() @@ -93,14 +172,14 @@ class CommandData // to the beginning. array_shift($args); - if ($this->usesInputInterface) { - array_unshift($args, $this->input()); - } - if ($this->usesOutputInterface) { array_unshift($args, $this->output()); } + if ($this->usesInputInterface) { + array_unshift($args, $this->input()); + } + return $args; } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/CommandFileDiscovery.php b/lib/composer/vendor/consolidation/annotated-command/src/CommandFileDiscovery.php index 7c47528d..06489fb0 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/CommandFileDiscovery.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/CommandFileDiscovery.php @@ -40,6 +40,8 @@ class CommandFileDiscovery protected $includeFilesAtBase = true; /** @var integer */ protected $searchDepth = 2; + /** @var bool */ + protected $followLinks = false; public function __construct() { @@ -101,6 +103,16 @@ class CommandFileDiscovery return $this; } + /** + * Specify that the discovery object should follow symlinks. By + * default, symlinks are not followed. + */ + public function followLinks($followLinks = true) + { + $this->followLinks = $followLinks; + return $this; + } + /** * Set the list of search locations to examine in each directory where * command files may be found. This replaces whatever was there before. @@ -325,6 +337,10 @@ class CommandFileDiscovery $finder->exclude($item); } + if ($this->followLinks) { + $finder->followLinks(); + } + return $finder; } @@ -357,13 +373,14 @@ class CommandFileDiscovery */ protected function joinPaths(array $pathParts) { - return $this->joinParts( + $path = $this->joinParts( '/', $pathParts, function ($item) { return !empty($item); } ); + return str_replace(DIRECTORY_SEPARATOR, '/', $path); } /** @@ -375,6 +392,12 @@ class CommandFileDiscovery */ protected function joinParts($delimiter, $parts, $filterFunction) { + $parts = array_map( + function ($item) use ($delimiter) { + return rtrim($item, $delimiter); + }, + $parts + ); return implode( $delimiter, array_filter($parts, $filterFunction) diff --git a/lib/composer/vendor/consolidation/annotated-command/src/CommandProcessor.php b/lib/composer/vendor/consolidation/annotated-command/src/CommandProcessor.php index a68ab1db..ab4ce45d 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/CommandProcessor.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/CommandProcessor.php @@ -1,7 +1,9 @@ passExceptions = $passExceptions; + return $this; + } + + public function commandErrorForException(\Exception $e) + { + if ($this->passExceptions) { + throw $e; + } + return new CommandError($e->getMessage(), $e->getCode()); + } + /** * Return the formatter manager * @return FormatterManager @@ -73,7 +113,8 @@ class CommandProcessor $names, AnnotationData $annotationData ) { - return $this->hookManager()->initializeHook($input, $names, $annotationData); + $initializeDispatcher = new InitializeHookDispatcher($this->hookManager(), $names); + return $initializeDispatcher->initialize($input, $annotationData); } public function optionsHook( @@ -81,7 +122,8 @@ class CommandProcessor $names, AnnotationData $annotationData ) { - $this->hookManager()->optionsHook($command, $names, $annotationData); + $optionsDispatcher = new OptionsHookDispatcher($this->hookManager(), $names); + $optionsDispatcher->getOptions($command, $annotationData); } public function interact( @@ -90,7 +132,8 @@ class CommandProcessor $names, AnnotationData $annotationData ) { - return $this->hookManager()->interact($input, $output, $names, $annotationData); + $interactDispatcher = new InteractHookDispatcher($this->hookManager(), $names); + return $interactDispatcher->interact($input, $output, $annotationData); } public function process( @@ -108,7 +151,7 @@ class CommandProcessor ); return $this->handleResults($output, $names, $result, $commandData); } catch (\Exception $e) { - $result = new CommandError($e->getMessage(), $e->getCode()); + $result = $this->commandErrorForException($e); return $this->handleResults($output, $names, $result, $commandData); } } @@ -120,11 +163,20 @@ class CommandProcessor ) { // Validators return any object to signal a validation error; // if the return an array, it replaces the arguments. - $validated = $this->hookManager()->validateArguments($names, $commandData); + $validateDispatcher = new ValidateHookDispatcher($this->hookManager(), $names); + $validated = $validateDispatcher->validate($commandData); if (is_object($validated)) { return $validated; } + $replaceDispatcher = new ReplaceCommandHookDispatcher($this->hookManager(), $names); + if ($this->logger) { + $replaceDispatcher->setLogger($this->logger); + } + if ($replaceDispatcher->hasReplaceCommandHook()) { + $commandCallback = $replaceDispatcher->getReplacementCommand($commandData); + } + // Run the command, alter the results, and then handle output and status $result = $this->runCommandCallback($commandCallback, $commandData); return $this->processResults($names, $result, $commandData); @@ -132,7 +184,8 @@ class CommandProcessor public function processResults($names, $result, CommandData $commandData) { - return $this->hookManager()->alterResult($names, $result, $commandData); + $processDispatcher = new ProcessResultHookDispatcher($this->hookManager(), $names); + return $processDispatcher->process($result, $commandData); } /** @@ -140,7 +193,8 @@ class CommandProcessor */ public function handleResults(OutputInterface $output, $names, $result, CommandData $commandData) { - $status = $this->hookManager()->determineStatusCode($names, $result); + $statusCodeDispatcher = new StatusDeterminerHookDispatcher($this->hookManager(), $names); + $status = $statusCodeDispatcher->determineStatusCode($result); // If the result is an integer and no separate status code was provided, then use the result as the status and do no output. if (is_integer($result) && !isset($status)) { return $result; @@ -148,7 +202,8 @@ class CommandProcessor $status = $this->interpretStatusCode($status); // Get the structured output, the output stream and the formatter - $structuredOutput = $this->hookManager()->extractOutput($names, $result); + $extractDispatcher = new ExtracterHookDispatcher($this->hookManager(), $names); + $structuredOutput = $extractDispatcher->extractOutput($result); $output = $this->chooseOutputStream($output, $status); if ($status != 0) { return $this->writeErrorMessage($output, $status, $structuredOutput, $result); @@ -179,7 +234,7 @@ class CommandProcessor $args = $commandData->getArgsAndOptions(); $result = call_user_func_array($commandCallback, $args); } catch (\Exception $e) { - $result = new CommandError($e->getMessage(), $e->getCode()); + $result = $this->commandErrorForException($e); } return $result; } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Events/CustomEventAwareInterface.php b/lib/composer/vendor/consolidation/annotated-command/src/Events/CustomEventAwareInterface.php new file mode 100644 index 00000000..806b55df --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Events/CustomEventAwareInterface.php @@ -0,0 +1,20 @@ +hookManager = $hookManager; + } + + /** + * {@inheritdoc} + */ + public function getCustomEventHandlers($eventName) + { + if (!$this->hookManager) { + return []; + } + return $this->hookManager->getHook($eventName, HookManager::ON_EVENT); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpCommand.php b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpCommand.php new file mode 100644 index 00000000..d540d2a9 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpCommand.php @@ -0,0 +1,48 @@ +application = $application; + } + + public function getApplication() + { + return $this->application; + } + + /** + * Run the help command + * + * @command my-help + * @return \Consolidation\AnnotatedCommand\Help\HelpDocument + */ + public function help($commandName = 'help') + { + $command = $this->getApplication()->find($commandName); + + $helpDocument = $this->getHelpDocument($command); + return $helpDocument; + } + + /** + * Create a help document. + */ + protected function getHelpDocument($command) + { + return new HelpDocument($command); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocument.php b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocument.php new file mode 100644 index 00000000..67609d65 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocument.php @@ -0,0 +1,65 @@ +generateBaseHelpDom($command); + $dom = $this->alterHelpDocument($command, $dom); + + $this->command = $command; + $this->dom = $dom; + } + + /** + * Convert data into a \DomDocument. + * + * @return \DomDocument + */ + public function getDomData() + { + return $this->dom; + } + + /** + * Create the base help DOM prior to alteration by the Command object. + * @param Command $command + * @return \DomDocument + */ + protected function generateBaseHelpDom(Command $command) + { + // Use Symfony to generate xml text. If other formats are + // requested, convert from xml to the desired form. + $descriptor = new XmlDescriptor(); + return $descriptor->getCommandDocument($command); + } + + /** + * Alter the DOM document per the command object + * @param Command $command + * @param \DomDocument $dom + * @return \DomDocument + */ + protected function alterHelpDocument(Command $command, \DomDocument $dom) + { + if ($command instanceof HelpDocumentAlter) { + $dom = $command->helpAlter($dom); + } + return $dom; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocumentAlter.php b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocumentAlter.php new file mode 100644 index 00000000..0d7f49c7 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocumentAlter.php @@ -0,0 +1,7 @@ +getHooks($hooks); + foreach ($commandEventHooks as $commandEvent) { + if ($commandEvent instanceof EventDispatcherInterface) { + $commandEvent->dispatch(ConsoleEvents::COMMAND, $event); + } + if (is_callable($commandEvent)) { + $commandEvent($event); + } + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ExtracterHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ExtracterHookDispatcher.php new file mode 100644 index 00000000..26bb1d2e --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ExtracterHookDispatcher.php @@ -0,0 +1,47 @@ +getOutputData(); + } + + $hooks = [ + HookManager::EXTRACT_OUTPUT, + ]; + $extractors = $this->getHooks($hooks); + foreach ($extractors as $extractor) { + $structuredOutput = $this->callExtractor($extractor, $result); + if (isset($structuredOutput)) { + return $structuredOutput; + } + } + + return $result; + } + + protected function callExtractor($extractor, $result) + { + if ($extractor instanceof ExtractOutputInterface) { + return $extractor->extractOutput($result); + } + if (is_callable($extractor)) { + return $extractor($result); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/HookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/HookDispatcher.php new file mode 100644 index 00000000..aa850eab --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/HookDispatcher.php @@ -0,0 +1,27 @@ +hookManager = $hookManager; + $this->names = $names; + } + + public function getHooks($hooks, $annotationData = null) + { + return $this->hookManager->getHooks($this->names, $hooks, $annotationData); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php new file mode 100644 index 00000000..dd12d500 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php @@ -0,0 +1,40 @@ +getHooks($hooks, $annotationData); + foreach ($providers as $provider) { + $this->callInitializeHook($provider, $input, $annotationData); + } + } + + protected function callInitializeHook($provider, $input, AnnotationData $annotationData) + { + if ($provider instanceof InitializeHookInterface) { + return $provider->initialize($input, $annotationData); + } + if (is_callable($provider)) { + return $provider($input, $annotationData); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InteractHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InteractHookDispatcher.php new file mode 100644 index 00000000..6de718dd --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InteractHookDispatcher.php @@ -0,0 +1,41 @@ +getHooks($hooks, $annotationData); + foreach ($interactors as $interactor) { + $this->callInteractor($interactor, $input, $output, $annotationData); + } + } + + protected function callInteractor($interactor, $input, $output, AnnotationData $annotationData) + { + if ($interactor instanceof InteractorInterface) { + return $interactor->interact($input, $output, $annotationData); + } + if (is_callable($interactor)) { + return $interactor($input, $output, $annotationData); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/OptionsHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/OptionsHookDispatcher.php new file mode 100644 index 00000000..59752266 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/OptionsHookDispatcher.php @@ -0,0 +1,44 @@ +getHooks($hooks, $annotationData); + foreach ($optionHooks as $optionHook) { + $this->callOptionHook($optionHook, $command, $annotationData); + } + $commandInfoList = $this->hookManager->getHookOptionsForCommand($command); + if ($command instanceof AnnotatedCommand) { + $command->optionsHookForHookAnnotations($commandInfoList); + } + } + + protected function callOptionHook($optionHook, $command, AnnotationData $annotationData) + { + if ($optionHook instanceof OptionHookInterface) { + return $optionHook->getOptions($command, $annotationData); + } + if (is_callable($optionHook)) { + return $optionHook($command, $annotationData); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ProcessResultHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ProcessResultHookDispatcher.php new file mode 100644 index 00000000..dca2b230 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ProcessResultHookDispatcher.php @@ -0,0 +1,53 @@ +getHooks($hooks, $commandData->annotationData()); + foreach ($processors as $processor) { + $result = $this->callProcessor($processor, $result, $commandData); + } + + return $result; + } + + protected function callProcessor($processor, $result, CommandData $commandData) + { + $processed = null; + if ($processor instanceof ProcessResultInterface) { + $processed = $processor->process($result, $commandData); + } + if (is_callable($processor)) { + $processed = $processor($result, $commandData); + } + if (isset($processed)) { + return $processed; + } + return $result; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ReplaceCommandHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ReplaceCommandHookDispatcher.php new file mode 100644 index 00000000..1687a96a --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ReplaceCommandHookDispatcher.php @@ -0,0 +1,66 @@ +getReplaceCommandHooks()); + } + + /** + * @return \callable[] + */ + public function getReplaceCommandHooks() + { + $hooks = [ + HookManager::REPLACE_COMMAND_HOOK, + ]; + $replaceCommandHooks = $this->getHooks($hooks); + + return $replaceCommandHooks; + } + + /** + * @param \Consolidation\AnnotatedCommand\CommandData $commandData + * + * @return callable + */ + public function getReplacementCommand(CommandData $commandData) + { + $replaceCommandHooks = $this->getReplaceCommandHooks(); + + // We only take the first hook implementation of "replace-command" as the replacement. Commands shouldn't have + // more than one replacement. + $replacementCommand = reset($replaceCommandHooks); + + if ($this->logger && count($replaceCommandHooks) > 1) { + $command_name = $commandData->annotationData()->get('command', 'unknown'); + $message = "Multiple implementations of the \"replace - command\" hook exist for the \"$command_name\" command.\n"; + foreach ($replaceCommandHooks as $replaceCommandHook) { + $class = get_class($replaceCommandHook[0]); + $method = $replaceCommandHook[1]; + $hook_name = "$class->$method"; + $message .= " - $hook_name\n"; + } + $this->logger->warning($message); + } + + return $replacementCommand; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/StatusDeterminerHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/StatusDeterminerHookDispatcher.php new file mode 100644 index 00000000..911dcb1d --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/StatusDeterminerHookDispatcher.php @@ -0,0 +1,51 @@ +getExitCode(); + } + + $hooks = [ + HookManager::STATUS_DETERMINER, + ]; + // If the result does not implement ExitCodeInterface, + // then we'll see if there is a determiner that can + // extract a status code from the result. + $determiners = $this->getHooks($hooks); + foreach ($determiners as $determiner) { + $status = $this->callDeterminer($determiner, $result); + if (isset($status)) { + return $status; + } + } + } + + protected function callDeterminer($determiner, $result) + { + if ($determiner instanceof StatusDeterminerInterface) { + return $determiner->determineStatusCode($result); + } + if (is_callable($determiner)) { + return $determiner($result); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.php new file mode 100644 index 00000000..fb4f489f --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.php @@ -0,0 +1,46 @@ +getHooks($hooks, $commandData->annotationData()); + foreach ($validators as $validator) { + $validated = $this->callValidator($validator, $commandData); + if ($validated === false) { + return new CommandError(); + } + if (is_object($validated)) { + return $validated; + } + } + } + + protected function callValidator($validator, CommandData $commandData) + { + if ($validator instanceof ValidatorInterface) { + return $validator->validate($commandData); + } + if (is_callable($validator)) { + return $validator($commandData); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/HookManager.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/HookManager.php index 4be68db1..ade39aae 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/HookManager.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/HookManager.php @@ -8,12 +8,15 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\ConsoleEvents; use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; use Consolidation\AnnotatedCommand\ExitCodeInterface; use Consolidation\AnnotatedCommand\OutputDataInterface; use Consolidation\AnnotatedCommand\AnnotationData; use Consolidation\AnnotatedCommand\CommandData; use Consolidation\AnnotatedCommand\CommandError; +use Consolidation\AnnotatedCommand\Hooks\Dispatchers\CommandEventHookDispatcher; /** * Manage named callback hooks @@ -24,6 +27,7 @@ class HookManager implements EventSubscriberInterface /** var CommandInfo[] */ protected $hookOptions = []; + const REPLACE_COMMAND_HOOK = 'replace-command'; const PRE_COMMAND_EVENT = 'pre-command-event'; const COMMAND_EVENT = 'command-event'; const POST_COMMAND_EVENT = 'post-command-event'; @@ -50,6 +54,7 @@ class HookManager implements EventSubscriberInterface const POST_ALTER_RESULT = 'post-alter'; const STATUS_DETERMINER = 'status'; const EXTRACT_OUTPUT = 'extract'; + const ON_EVENT = 'on-event'; public function __construct() { @@ -117,6 +122,44 @@ class HookManager implements EventSubscriberInterface return $reflectionClass->getName(); } + /** + * Add a replace command hook + * + * @param type ReplaceCommandHookInterface $provider + * @param type string $command_name The name of the command to replace + */ + public function addReplaceCommandHook(ReplaceCommandHookInterface $replaceCommandHook, $name) + { + $this->hooks[$name][self::REPLACE_COMMAND_HOOK][] = $replaceCommandHook; + return $this; + } + + public function addPreCommandEventDispatcher(EventDispatcherInterface $eventDispatcher, $name = '*') + { + $this->hooks[$name][self::PRE_COMMAND_EVENT][] = $eventDispatcher; + return $this; + } + + public function addCommandEventDispatcher(EventDispatcherInterface $eventDispatcher, $name = '*') + { + $this->hooks[$name][self::COMMAND_EVENT][] = $eventDispatcher; + return $this; + } + + public function addPostCommandEventDispatcher(EventDispatcherInterface $eventDispatcher, $name = '*') + { + $this->hooks[$name][self::POST_COMMAND_EVENT][] = $eventDispatcher; + return $this; + } + + public function addCommandEvent(EventSubscriberInterface $eventSubscriber) + { + // Wrap the event subscriber in a dispatcher and add it + $dispatcher = new EventDispatcher(); + $dispatcher->addSubscriber($eventSubscriber); + return $this->addCommandEventDispatcher($dispatcher); + } + /** * Add an configuration provider hook * @@ -281,30 +324,6 @@ class HookManager implements EventSubscriberInterface return $this; } - public function initializeHook( - InputInterface $input, - $names, - AnnotationData $annotationData - ) { - $providers = $this->getInitializeHooks($names, $annotationData); - foreach ($providers as $provider) { - $this->callInjectConfigurationHook($provider, $input, $annotationData); - } - } - - public function optionsHook( - \Consolidation\AnnotatedCommand\AnnotatedCommand $command, - $names, - AnnotationData $annotationData - ) { - $optionHooks = $this->getOptionHooks($names, $annotationData); - foreach ($optionHooks as $optionHook) { - $this->callOptionHook($optionHook, $command, $annotationData); - } - $commandInfoList = $this->getHookOptionsForCommand($command); - $command->optionsHookForHookAnnotations($commandInfoList); - } - public function getHookOptionsForCommand($command) { $names = $this->addWildcardHooksToNames($command->getNames(), $command->getAnnotationData()); @@ -325,210 +344,6 @@ class HookManager implements EventSubscriberInterface return $result; } - public function interact( - InputInterface $input, - OutputInterface $output, - $names, - AnnotationData $annotationData - ) { - $interactors = $this->getInteractors($names, $annotationData); - foreach ($interactors as $interactor) { - $this->callInteractor($interactor, $input, $output, $annotationData); - } - } - - public function validateArguments($names, CommandData $commandData) - { - $validators = $this->getValidators($names, $commandData->annotationData()); - foreach ($validators as $validator) { - $validated = $this->callValidator($validator, $commandData); - if ($validated === false) { - return new CommandError(); - } - if (is_object($validated)) { - return $validated; - } - } - } - - /** - * Process result and decide what to do with it. - * Allow client to add transformation / interpretation - * callbacks. - */ - public function alterResult($names, $result, CommandData $commandData) - { - $processors = $this->getProcessResultHooks($names, $commandData->annotationData()); - foreach ($processors as $processor) { - $result = $this->callProcessor($processor, $result, $commandData); - } - $alterers = $this->getAlterResultHooks($names, $commandData->annotationData()); - foreach ($alterers as $alterer) { - $result = $this->callProcessor($alterer, $result, $commandData); - } - - return $result; - } - - /** - * Call all status determiners, and see if any of them - * know how to convert to a status code. - */ - public function determineStatusCode($names, $result) - { - // If the result (post-processing) is an object that - // implements ExitCodeInterface, then we will ask it - // to give us the status code. - if ($result instanceof ExitCodeInterface) { - return $result->getExitCode(); - } - - // If the result does not implement ExitCodeInterface, - // then we'll see if there is a determiner that can - // extract a status code from the result. - $determiners = $this->getStatusDeterminers($names); - foreach ($determiners as $determiner) { - $status = $this->callDeterminer($determiner, $result); - if (isset($status)) { - return $status; - } - } - } - - /** - * Convert the result object to printable output in - * structured form. - */ - public function extractOutput($names, $result) - { - if ($result instanceof OutputDataInterface) { - return $result->getOutputData(); - } - - $extractors = $this->getOutputExtractors($names); - foreach ($extractors as $extractor) { - $structuredOutput = $this->callExtractor($extractor, $result); - if (isset($structuredOutput)) { - return $structuredOutput; - } - } - - return $result; - } - - protected function getCommandEventHooks($names) - { - return $this->getHooks( - $names, - [ - self::PRE_COMMAND_EVENT, - self::COMMAND_EVENT, - self::POST_COMMAND_EVENT - ] - ); - } - - protected function getInitializeHooks($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_INITIALIZE, - self::INITIALIZE, - self::POST_INITIALIZE - ], - $annotationData - ); - } - - protected function getOptionHooks($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_OPTION_HOOK, - self::OPTION_HOOK, - self::POST_OPTION_HOOK - ], - $annotationData - ); - } - - protected function getInteractors($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_INTERACT, - self::INTERACT, - self::POST_INTERACT - ], - $annotationData - ); - } - - protected function getValidators($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_ARGUMENT_VALIDATOR, - self::ARGUMENT_VALIDATOR, - self::POST_ARGUMENT_VALIDATOR, - self::PRE_COMMAND_HOOK, - self::COMMAND_HOOK, - ], - $annotationData - ); - } - - protected function getProcessResultHooks($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_PROCESS_RESULT, - self::PROCESS_RESULT, - self::POST_PROCESS_RESULT - ], - $annotationData - ); - } - - protected function getAlterResultHooks($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_ALTER_RESULT, - self::ALTER_RESULT, - self::POST_ALTER_RESULT, - self::POST_COMMAND_HOOK, - ], - $annotationData - ); - } - - protected function getStatusDeterminers($names) - { - return $this->getHooks( - $names, - [ - self::STATUS_DETERMINER, - ] - ); - } - - protected function getOutputExtractors($names) - { - return $this->getHooks( - $names, - [ - self::EXTRACT_OUTPUT, - ] - ); - } - /** * Get a set of hooks with the provided name(s). Include the * pre- and post- hooks, and also include the global hooks ('*') @@ -583,7 +398,7 @@ class HookManager implements EventSubscriberInterface * * @return callable[] */ - protected function getHook($name, $hook) + public function getHook($name, $hook) { if (isset($this->hooks[$name][$hook])) { return $this->hooks[$name][$hook]; @@ -591,103 +406,22 @@ class HookManager implements EventSubscriberInterface return []; } - protected function callInjectConfigurationHook($provider, $input, AnnotationData $annotationData) - { - if ($provider instanceof InitializeHookInterface) { - return $provider->applyConfiguration($input, $annotationData); - } - if (is_callable($provider)) { - return $provider($input, $annotationData); - } - } - - protected function callOptionHook($optionHook, $command, AnnotationData $annotationData) - { - if ($optionHook instanceof OptionHookInterface) { - return $optionHook->getOptions($command, $annotationData); - } - if (is_callable($optionHook)) { - return $optionHook($command, $annotationData); - } - } - - protected function callInteractor($interactor, $input, $output, AnnotationData $annotationData) - { - if ($interactor instanceof InteractorInterface) { - return $interactor->interact($input, $output, $annotationData); - } - if (is_callable($interactor)) { - return $interactor($input, $output, $annotationData); - } - } - - protected function callValidator($validator, CommandData $commandData) - { - if ($validator instanceof ValidatorInterface) { - return $validator->validate($commandData); - } - if (is_callable($validator)) { - return $validator($commandData); - } - } - - protected function callProcessor($processor, $result, CommandData $commandData) - { - $processed = null; - if ($processor instanceof ProcessResultInterface) { - $processed = $processor->process($result, $commandData); - } - if (is_callable($processor)) { - $processed = $processor($result, $commandData); - } - if (isset($processed)) { - return $processed; - } - return $result; - } - - protected function callDeterminer($determiner, $result) - { - if ($determiner instanceof StatusDeterminerInterface) { - return $determiner->determineStatusCode($result); - } - if (is_callable($determiner)) { - return $determiner($result); - } - } - - protected function callExtractor($extractor, $result) - { - if ($extractor instanceof ExtractOutputInterface) { - return $extractor->extractOutput($result); - } - if (is_callable($extractor)) { - return $extractor($result); - } - } - /** + * Call the command event hooks. + * + * TODO: This should be moved to CommandEventHookDispatcher, which + * should become the class that implements EventSubscriberInterface. + * This change would break all clients, though, so postpone until next + * major release. + * * @param ConsoleCommandEvent $event */ public function callCommandEventHooks(ConsoleCommandEvent $event) { /* @var Command $command */ $command = $event->getCommand(); - $names = [$command->getName()]; - $commandEventHooks = $this->getCommandEventHooks($names); - foreach ($commandEventHooks as $commandEvent) { - if (is_callable($commandEvent)) { - $commandEvent($event); - } - } - } - - public function findAndAddHookOptions($command) - { - if (!$command instanceof \Consolidation\AnnotatedCommand\AnnotatedCommand) { - return; - } - $command->optionsHook(); + $dispatcher = new CommandEventHookDispatcher($this, [$command->getName()]); + $dispatcher->callCommandEventHooks($event); } /** diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/InitializeHookInterface.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/InitializeHookInterface.php index 8e70ef11..5d261478 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/InitializeHookInterface.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/InitializeHookInterface.php @@ -11,5 +11,5 @@ use Symfony\Component\Console\Input\InputInterface; */ interface InitializeHookInterface { - public function initialize(InputInterface $input, Annotation $annotationData); + public function initialize(InputInterface $input, AnnotationData $annotationData); } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Options/AlterOptionsCommandEvent.php b/lib/composer/vendor/consolidation/annotated-command/src/Options/AlterOptionsCommandEvent.php index fce2c2ec..b16a8eda 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Options/AlterOptionsCommandEvent.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Options/AlterOptionsCommandEvent.php @@ -58,7 +58,14 @@ class AlterOptionsCommandEvent implements EventSubscriberInterface $input->bind($command->getDefinition()); } + // Symfony Console helpfully swaps 'command_name' and 'command' + // depending on whether the user entered `help foo` or `--help foo`. + // One of these is always `help`, and the other is the command we + // are actually interested in. $nameOfCommandToDescribe = $event->getInput()->getArgument('command_name'); + if ($nameOfCommandToDescribe == 'help') { + $nameOfCommandToDescribe = $event->getInput()->getArgument('command'); + } $commandToDescribe = $this->application->find($nameOfCommandToDescribe); $this->findAndAddHookOptions($commandToDescribe); } else { diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Options/PrepareTerminalWidthOption.php b/lib/composer/vendor/consolidation/annotated-command/src/Options/PrepareTerminalWidthOption.php index ef5527d1..6c70b7c2 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Options/PrepareTerminalWidthOption.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Options/PrepareTerminalWidthOption.php @@ -10,6 +10,8 @@ class PrepareTerminalWidthOption implements PrepareFormatter /** var Application */ protected $application; + protected $terminal; + /** var int */ protected $defaultWidth; @@ -19,6 +21,9 @@ class PrepareTerminalWidthOption implements PrepareFormatter /** var int */ protected $minWidth = 0; + /* var boolean */ + protected $shouldWrap = true; + public function __construct($defaultWidth = 0) { $this->defaultWidth = $defaultWidth; @@ -29,6 +34,24 @@ class PrepareTerminalWidthOption implements PrepareFormatter $this->application = $application; } + public function setTerminal($terminal) + { + $this->terminal = $terminal; + } + + public function getTerminal() + { + if (!$this->terminal && class_exists('\Symfony\Component\Console\Terminal')) { + $this->terminal = new \Symfony\Component\Console\Terminal(); + } + return $this->terminal; + } + + public function enableWrap($shouldWrap) + { + $this->shouldWrap = $shouldWrap; + } + public function prepare(CommandData $commandData, FormatterOptions $options) { $width = $this->getTerminalWidth(); @@ -45,10 +68,24 @@ class PrepareTerminalWidthOption implements PrepareFormatter protected function getTerminalWidth() { - if (!$this->application) { + // Don't wrap if wrapping has been disabled. + if (!$this->shouldWrap) { return 0; } + $terminal = $this->getTerminal(); + if ($terminal) { + return $terminal->getWidth(); + } + + return $this->getTerminalWidthViaApplication(); + } + + protected function getTerminalWidthViaApplication() + { + if (!$this->application) { + return 0; + } $dimensions = $this->application->getTerminalDimensions(); if ($dimensions[0] == null) { return 0; diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfo.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfo.php index c7668f75..8cb728f3 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfo.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfo.php @@ -17,6 +17,11 @@ use Consolidation\AnnotatedCommand\AnnotationData; */ class CommandInfo { + /** + * Serialization schema version. Incremented every time the serialization schema changes. + */ + const SERIALIZATION_SCHEMA_VERSION = 3; + /** * @var \ReflectionMethod */ @@ -26,7 +31,7 @@ class CommandInfo * @var boolean * @var string */ - protected $docBlockIsParsed; + protected $docBlockIsParsed = false; /** * @var string @@ -68,6 +73,11 @@ class CommandInfo */ protected $aliases = []; + /** + * @var InputOption[] + */ + protected $inputOptions; + /** * @var string */ @@ -78,33 +88,59 @@ class CommandInfo */ protected $returnType; - /** - * @var string - */ - protected $optionParamName; - /** * Create a new CommandInfo class for a particular method of a class. * * @param string|mixed $classNameOrInstance The name of a class, or an - * instance of it. + * instance of it, or an array of cached data. * @param string $methodName The name of the method to get info about. + * @param array $cache Cached data + * @deprecated Use CommandInfo::create() or CommandInfo::deserialize() + * instead. In the future, this constructor will be protected. */ - public function __construct($classNameOrInstance, $methodName) + public function __construct($classNameOrInstance, $methodName, $cache = []) { $this->reflection = new \ReflectionMethod($classNameOrInstance, $methodName); $this->methodName = $methodName; + $this->arguments = new DefaultsWithDescriptions(); + $this->options = new DefaultsWithDescriptions(); + + // If the cache came from a newer version, ignore it and + // regenerate the cached information. + if (!empty($cache) && CommandInfoDeserializer::isValidSerializedData($cache) && !$this->cachedFileIsModified($cache)) { + $deserializer = new CommandInfoDeserializer(); + $deserializer->constructFromCache($this, $cache); + $this->docBlockIsParsed = true; + } else { + $this->constructFromClassAndMethod($classNameOrInstance, $methodName); + } + } + + public static function create($classNameOrInstance, $methodName) + { + return new self($classNameOrInstance, $methodName); + } + + public static function deserialize($cache) + { + $cache = (array)$cache; + return new self($cache['class'], $cache['method_name'], $cache); + } + + public function cachedFileIsModified($cache) + { + $path = $this->reflection->getFileName(); + return filemtime($path) != $cache['mtime']; + } + + protected function constructFromClassAndMethod($classNameOrInstance, $methodName) + { $this->otherAnnotations = new AnnotationData(); // Set up a default name for the command from the method name. // This can be overridden via @command or @name annotations. - $this->name = $this->convertName($this->reflection->name); + $this->name = $this->convertName($methodName); $this->options = new DefaultsWithDescriptions($this->determineOptionsFromParameters(), false); $this->arguments = $this->determineAgumentClassifications(); - // Remember the name of the last parameter, if it holds the options. - // We will use this information to ignore @param annotations for the options. - if (!empty($this->options)) { - $this->optionParamName = $this->lastParameterName(); - } } /** @@ -139,6 +175,28 @@ class CommandInfo return $this; } + /** + * Return whether or not this method represents a valid command + * or hook. + */ + public function valid() + { + return !empty($this->name); + } + + /** + * If higher-level code decides that this CommandInfo is not interesting + * or useful (if it is not a command method or a hook method), then + * we will mark it as invalid to prevent it from being created as a command. + * We still cache a placeholder record for invalid methods, so that we + * do not need to re-parse the method again later simply to determine that + * it is invalid. + */ + public function invalidate() + { + $this->name = ''; + } + public function getReturnType() { $this->parseDocBlock(); @@ -164,6 +222,15 @@ class CommandInfo return $this->otherAnnotations; } + /** + * Replace the annotation data. + */ + public function replaceRawAnnotations($annotationData) + { + $this->otherAnnotations = new AnnotationData((array) $annotationData); + return $this; + } + /** * Get any annotations included in the docblock comment, * also including default values such as @command. We add @@ -176,27 +243,49 @@ class CommandInfo */ public function getAnnotations() { + // Also provide the path to the commandfile that these annotations + // were pulled from and the classname of that file. + $path = $this->reflection->getFileName(); + $className = $this->reflection->getDeclaringClass()->getName(); return new AnnotationData( $this->getRawAnnotations()->getArrayCopy() + [ 'command' => $this->getName(), + '_path' => $path, + '_classname' => $className, ] ); } /** - * Return a specific named annotation for this command. + * Return a specific named annotation for this command as a list. * - * @param string $annotation The name of the annotation. - * @return string + * @param string $name The name of the annotation. + * @return array|null */ - public function getAnnotation($annotation) + public function getAnnotationList($name) { // hasAnnotation parses the docblock - if (!$this->hasAnnotation($annotation)) { + if (!$this->hasAnnotation($name)) { return null; } - return $this->otherAnnotations[$annotation]; + return $this->otherAnnotations->getList($name); + ; + } + + /** + * Return a specific named annotation for this command as a string. + * + * @param string $name The name of the annotation. + * @return string|null + */ + public function getAnnotation($name) + { + // hasAnnotation parses the docblock + if (!$this->hasAnnotation($name)) { + return null; + } + return $this->otherAnnotations->get($name); } /** @@ -217,6 +306,11 @@ class CommandInfo */ public function addAnnotation($name, $content) { + // Convert to an array and merge if there are multiple + // instances of the same annotation defined. + if (isset($this->otherAnnotations[$name])) { + $content = array_merge((array) $this->otherAnnotations[$name], (array)$content); + } $this->otherAnnotations[$name] = $content; } @@ -246,7 +340,7 @@ class CommandInfo */ public function setDescription($description) { - $this->description = $description; + $this->description = str_replace("\n", ' ', $description); return $this; } @@ -293,6 +387,27 @@ class CommandInfo return $this; } + /** + * Get hidden status for the command. + * @return bool + */ + public function getHidden() + { + $this->parseDocBlock(); + return $this->hasAnnotation('hidden'); + } + + /** + * Set hidden status. List command omits hidden commands. + * + * @param bool $hidden + */ + public function setHidden($hidden) + { + $this->hidden = $hidden; + return $this; + } + /** * Return the examples for this command. This is @usage instead of * @example because the later is defined by the phpdoc standard to @@ -319,6 +434,29 @@ class CommandInfo return $this; } + /** + * Overwrite all example usages + */ + public function replaceExampleUsages($usages) + { + $this->exampleUsage = $usages; + return $this; + } + + /** + * Return the topics for this command. + * + * @return string[] + */ + public function getTopics() + { + if (!$this->hasAnnotation('topics')) { + return []; + } + $topics = $this->getAnnotation('topics'); + return explode(',', trim($topics)); + } + /** * Return the list of refleaction parameters. * @@ -349,14 +487,6 @@ class CommandInfo return $this->options; } - /** - * Return the name of the last parameter if it holds the options. - */ - public function optionParamName() - { - return $this->optionParamName; - } - /** * Get the inputOptions for the options associated with this CommandInfo * object, e.g. via @option annotations, or from @@ -366,8 +496,31 @@ class CommandInfo * @return InputOption[] */ public function inputOptions() + { + if (!isset($this->inputOptions)) { + $this->inputOptions = $this->createInputOptions(); + } + return $this->inputOptions; + } + + protected function addImplicitNoOptions() + { + $opts = $this->options()->getValues(); + foreach ($opts as $name => $defaultValue) { + if ($defaultValue === true) { + $key = 'no-' . $name; + if (!array_key_exists($key, $opts)) { + $description = "Negate --$name option."; + $this->options()->add($key, $description, false); + } + } + } + } + + protected function createInputOptions() { $explicitOptions = []; + $this->addImplicitNoOptions(); $opts = $this->options()->getValues(); foreach ($opts as $name => $defaultValue) { @@ -379,10 +532,28 @@ class CommandInfo list($fullName, $shortcut) = explode('|', $name, 2); } - if (is_bool($defaultValue)) { + // Treat the following two cases identically: + // - 'foo' => InputOption::VALUE_OPTIONAL + // - 'foo' => null + // The first form is preferred, but we will convert the value + // to 'null' for storage as the option default value. + if ($defaultValue === InputOption::VALUE_OPTIONAL) { + $defaultValue = null; + } + + if ($defaultValue === false) { $explicitOptions[$fullName] = new InputOption($fullName, $shortcut, InputOption::VALUE_NONE, $description); } elseif ($defaultValue === InputOption::VALUE_REQUIRED) { $explicitOptions[$fullName] = new InputOption($fullName, $shortcut, InputOption::VALUE_REQUIRED, $description); + } elseif (is_array($defaultValue)) { + $optionality = count($defaultValue) ? InputOption::VALUE_OPTIONAL : InputOption::VALUE_REQUIRED; + $explicitOptions[$fullName] = new InputOption( + $fullName, + $shortcut, + InputOption::VALUE_IS_ARRAY | $optionality, + $description, + count($defaultValue) ? $defaultValue : null + ); } else { $explicitOptions[$fullName] = new InputOption($fullName, $shortcut, InputOption::VALUE_OPTIONAL, $description, $defaultValue); } @@ -460,7 +631,7 @@ class CommandInfo $result = new DefaultsWithDescriptions(); $params = $this->reflection->getParameters(); $optionsFromParameters = $this->determineOptionsFromParameters(); - if (!empty($optionsFromParameters)) { + if ($this->lastParameterIsOptionsArray()) { array_pop($params); } foreach ($params as $param) { @@ -514,14 +685,26 @@ class CommandInfo return $param->getDefaultValue(); } - protected function lastParameterName() + /** + * Determine if the last argument contains $options. + * + * Two forms indicate options: + * - $options = [] + * - $options = ['flag' => 'default-value'] + * + * Any other form, including `array $foo`, is not options. + */ + protected function lastParameterIsOptionsArray() { $params = $this->reflection->getParameters(); - $param = end($params); - if (!$param) { - return ''; + if (empty($params)) { + return []; } - return $param->name; + $param = end($params); + if (!$param->isDefaultValueAvailable()) { + return []; + } + return is_array($param->getDefaultValue()); } /** @@ -529,7 +712,7 @@ class CommandInfo * is not associative if its keys are numeric, and numbered sequentially * from zero. All other arrays are considered to be associative. * - * @param arrau $arr The array + * @param array $arr The array * @return boolean */ protected function isAssoc($arr) diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php new file mode 100644 index 00000000..ed193cb5 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php @@ -0,0 +1,87 @@ + 0) && + ($cache['schema'] <= CommandInfo::SERIALIZATION_SCHEMA_VERSION) && + self::cachedMethodExists($cache); + } + + public function constructFromCache(CommandInfo $commandInfo, $info_array) + { + $info_array += $this->defaultSerializationData(); + + $commandInfo + ->setName($info_array['name']) + ->replaceRawAnnotations($info_array['annotations']) + ->setAliases($info_array['aliases']) + ->setHelp($info_array['help']) + ->setDescription($info_array['description']) + ->replaceExampleUsages($info_array['example_usages']) + ->setReturnType($info_array['return_type']) + ; + + $this->constructDefaultsWithDescriptions($commandInfo->arguments(), (array)$info_array['arguments']); + $this->constructDefaultsWithDescriptions($commandInfo->options(), (array)$info_array['options']); + } + + protected function constructDefaultsWithDescriptions(DefaultsWithDescriptions $defaults, $data) + { + foreach ($data as $key => $info) { + $info = (array)$info; + $defaults->add($key, $info['description']); + if (array_key_exists('default', $info)) { + $defaults->setDefaultValue($key, $info['default']); + } + } + } + + + /** + * Default data. Everything should be provided during serialization; + * this is just as a fallback for unusual circumstances. + * @return array + */ + protected function defaultSerializationData() + { + return [ + 'name' => '', + 'description' => '', + 'help' => '', + 'aliases' => [], + 'annotations' => [], + 'example_usages' => [], + 'return_type' => [], + 'parameters' => [], + 'arguments' => [], + 'options' => [], + 'mtime' => 0, + ]; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoSerializer.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoSerializer.php new file mode 100644 index 00000000..cab6993d --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoSerializer.php @@ -0,0 +1,59 @@ +getAnnotations(); + $path = $allAnnotations['_path']; + $className = $allAnnotations['_classname']; + + // Include the minimum information for command info (including placeholder records) + $info = [ + 'schema' => CommandInfo::SERIALIZATION_SCHEMA_VERSION, + 'class' => $className, + 'method_name' => $commandInfo->getMethodName(), + 'mtime' => filemtime($path), + ]; + + // If this is a valid method / hook, then add more information. + if ($commandInfo->valid()) { + $info += [ + 'name' => $commandInfo->getName(), + 'description' => $commandInfo->getDescription(), + 'help' => $commandInfo->getHelp(), + 'aliases' => $commandInfo->getAliases(), + 'annotations' => $commandInfo->getRawAnnotations()->getArrayCopy(), + 'example_usages' => $commandInfo->getExampleUsages(), + 'return_type' => $commandInfo->getReturnType(), + ]; + $info['arguments'] = $this->serializeDefaultsWithDescriptions($commandInfo->arguments()); + $info['options'] = $this->serializeDefaultsWithDescriptions($commandInfo->options()); + } + + return $info; + } + + protected function serializeDefaultsWithDescriptions(DefaultsWithDescriptions $defaults) + { + $result = []; + foreach ($defaults->getValues() as $key => $val) { + $result[$key] = [ + 'description' => $defaults->getDescription($key), + ]; + if ($defaults->hasDefault($key)) { + $result[$key]['default'] = $val; + } + } + return $result; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/DefaultsWithDescriptions.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/DefaultsWithDescriptions.php index 8f9e8173..d37fc51b 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/DefaultsWithDescriptions.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/DefaultsWithDescriptions.php @@ -32,7 +32,9 @@ class DefaultsWithDescriptions public function __construct($values = [], $defaultDefault = null) { $this->values = $values; - $this->hasDefault = []; + $this->hasDefault = array_filter($this->values, function ($value) { + return isset($value); + }); $this->descriptions = []; $this->defaultDefault = $defaultDefault; } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/AbstractCommandDocBlockParser.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/AbstractCommandDocBlockParser.php deleted file mode 100644 index 0534a994..00000000 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/AbstractCommandDocBlockParser.php +++ /dev/null @@ -1,252 +0,0 @@ - 'processCommandTag', - 'name' => 'processCommandTag', - 'arg' => 'processArgumentTag', - 'param' => 'processParamTag', - 'return' => 'processReturnTag', - 'option' => 'processOptionTag', - 'default' => 'processDefaultTag', - 'aliases' => 'processAliases', - 'usage' => 'processUsageTag', - 'description' => 'processAlternateDescriptionTag', - 'desc' => 'processAlternateDescriptionTag', - ]; - - public function __construct(CommandInfo $commandInfo, \ReflectionMethod $reflection) - { - $this->commandInfo = $commandInfo; - $this->reflection = $reflection; - } - - protected function processAllTags($phpdoc) - { - // Iterate over all of the tags, and process them as necessary. - foreach ($phpdoc->getTags() as $tag) { - $processFn = [$this, 'processGenericTag']; - if (array_key_exists($tag->getName(), $this->tagProcessors)) { - $processFn = [$this, $this->tagProcessors[$tag->getName()]]; - } - $processFn($tag); - } - } - - abstract protected function getTagContents($tag); - - /** - * Parse the docBlock comment for this command, and set the - * fields of this class with the data thereby obtained. - */ - abstract public function parse(); - - /** - * Save any tag that we do not explicitly recognize in the - * 'otherAnnotations' map. - */ - protected function processGenericTag($tag) - { - $this->commandInfo->addAnnotation($tag->getName(), $this->getTagContents($tag)); - } - - /** - * Set the name of the command from a @command or @name annotation. - */ - protected function processCommandTag($tag) - { - $commandName = $this->getTagContents($tag); - $this->commandInfo->setName($commandName); - // We also store the name in the 'other annotations' so that is is - // possible to determine if the method had a @command annotation. - $this->commandInfo->addAnnotation($tag->getName(), $commandName); - } - - /** - * The @description and @desc annotations may be used in - * place of the synopsis (which we call 'description'). - * This is discouraged. - * - * @deprecated - */ - protected function processAlternateDescriptionTag($tag) - { - $this->commandInfo->setDescription($this->getTagContents($tag)); - } - - /** - * Store the data from a @arg annotation in our argument descriptions. - */ - protected function processArgumentTag($tag) - { - if (!$this->pregMatchNameAndDescription((string)$tag->getDescription(), $match)) { - return; - } - $this->addOptionOrArgumentTag($tag, $this->commandInfo->arguments(), $match); - } - - /** - * Store the data from an @option annotation in our option descriptions. - */ - protected function processOptionTag($tag) - { - if (!$this->pregMatchOptionNameAndDescription((string)$tag->getDescription(), $match)) { - return; - } - $this->addOptionOrArgumentTag($tag, $this->commandInfo->options(), $match); - } - - protected function addOptionOrArgumentTag($tag, DefaultsWithDescriptions $set, $nameAndDescription) - { - $variableName = $this->commandInfo->findMatchingOption($nameAndDescription['name']); - $desc = $nameAndDescription['description']; - $description = static::removeLineBreaks($desc); - $set->add($variableName, $description); - } - - /** - * Store the data from a @default annotation in our argument or option store, - * as appropriate. - */ - protected function processDefaultTag($tag) - { - if (!$this->pregMatchNameAndDescription((string)$tag->getDescription(), $match)) { - return; - } - $variableName = $match['name']; - $defaultValue = $this->interpretDefaultValue($match['description']); - if ($this->commandInfo->arguments()->exists($variableName)) { - $this->commandInfo->arguments()->setDefaultValue($variableName, $defaultValue); - return; - } - $variableName = $this->commandInfo->findMatchingOption($variableName); - if ($this->commandInfo->options()->exists($variableName)) { - $this->commandInfo->options()->setDefaultValue($variableName, $defaultValue); - } - } - - /** - * Store the data from a @usage annotation in our example usage list. - */ - protected function processUsageTag($tag) - { - $lines = explode("\n", $this->getTagContents($tag)); - $usage = array_shift($lines); - $description = static::removeLineBreaks(implode("\n", $lines)); - - $this->commandInfo->setExampleUsage($usage, $description); - } - - /** - * Process the comma-separated list of aliases - */ - protected function processAliases($tag) - { - $this->commandInfo->setAliases((string)$tag->getDescription()); - } - - /** - * Store the data from a @param annotation in our argument descriptions. - */ - protected function processParamTag($tag) - { - $variableName = $tag->getVariableName(); - $variableName = str_replace('$', '', $variableName); - $description = static::removeLineBreaks((string)$tag->getDescription()); - if ($variableName == $this->commandInfo->optionParamName()) { - return; - } - $this->commandInfo->arguments()->add($variableName, $description); - } - - /** - * Store the data from a @return annotation in our argument descriptions. - */ - abstract protected function processReturnTag($tag); - - protected function interpretDefaultValue($defaultValue) - { - $defaults = [ - 'null' => null, - 'true' => true, - 'false' => false, - "''" => '', - '[]' => [], - ]; - foreach ($defaults as $defaultName => $defaultTypedValue) { - if ($defaultValue == $defaultName) { - return $defaultTypedValue; - } - } - return $defaultValue; - } - - /** - * Given a docblock description in the form "$variable description", - * return the variable name and description via the 'match' parameter. - */ - protected function pregMatchNameAndDescription($source, &$match) - { - $nameRegEx = '\\$(?P[^ \t]+)[ \t]+'; - $descriptionRegEx = '(?P.*)'; - $optionRegEx = "/{$nameRegEx}{$descriptionRegEx}/s"; - - return preg_match($optionRegEx, $source, $match); - } - - /** - * Given a docblock description in the form "$variable description", - * return the variable name and description via the 'match' parameter. - */ - protected function pregMatchOptionNameAndDescription($source, &$match) - { - // Strip type and $ from the text before the @option name, if present. - $source = preg_replace('/^[a-zA-Z]* ?\\$/', '', $source); - $nameRegEx = '(?P[^ \t]+)[ \t]+'; - $descriptionRegEx = '(?P.*)'; - $optionRegEx = "/{$nameRegEx}{$descriptionRegEx}/s"; - - return preg_match($optionRegEx, $source, $match); - } - - /** - * Given a list that might be 'a b c' or 'a, b, c' or 'a,b,c', - * convert the data into the last of these forms. - */ - protected static function convertListToCommaSeparated($text) - { - return preg_replace('#[ \t\n\r,]+#', ',', $text); - } - - /** - * Take a multiline description and convert it into a single - * long unbroken line. - */ - protected static function removeLineBreaks($text) - { - return trim(preg_replace('#[ \t\n\r]+#', ' ', $text)); - } -} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/BespokeDocBlockParser.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/BespokeDocBlockParser.php new file mode 100644 index 00000000..b53545c6 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/BespokeDocBlockParser.php @@ -0,0 +1,322 @@ + 'processCommandTag', + 'name' => 'processCommandTag', + 'arg' => 'processArgumentTag', + 'param' => 'processArgumentTag', + 'return' => 'processReturnTag', + 'option' => 'processOptionTag', + 'default' => 'processDefaultTag', + 'aliases' => 'processAliases', + 'usage' => 'processUsageTag', + 'description' => 'processAlternateDescriptionTag', + 'desc' => 'processAlternateDescriptionTag', + ]; + + public function __construct(CommandInfo $commandInfo, \ReflectionMethod $reflection, $fqcnCache = null) + { + $this->commandInfo = $commandInfo; + $this->reflection = $reflection; + $this->fqcnCache = $fqcnCache ?: new FullyQualifiedClassCache(); + } + + /** + * Parse the docBlock comment for this command, and set the + * fields of this class with the data thereby obtained. + */ + public function parse() + { + $doc = $this->reflection->getDocComment(); + $this->parseDocBlock($doc); + } + + /** + * Save any tag that we do not explicitly recognize in the + * 'otherAnnotations' map. + */ + protected function processGenericTag($tag) + { + $this->commandInfo->addAnnotation($tag->getTag(), $tag->getContent()); + } + + /** + * Set the name of the command from a @command or @name annotation. + */ + protected function processCommandTag($tag) + { + if (!$tag->hasWordAndDescription($matches)) { + throw new \Exception('Could not determine command name from tag ' . (string)$tag); + } + $commandName = $matches['word']; + $this->commandInfo->setName($commandName); + // We also store the name in the 'other annotations' so that is is + // possible to determine if the method had a @command annotation. + $this->commandInfo->addAnnotation($tag->getTag(), $commandName); + } + + /** + * The @description and @desc annotations may be used in + * place of the synopsis (which we call 'description'). + * This is discouraged. + * + * @deprecated + */ + protected function processAlternateDescriptionTag($tag) + { + $this->commandInfo->setDescription($tag->getContent()); + } + + /** + * Store the data from a @arg annotation in our argument descriptions. + */ + protected function processArgumentTag($tag) + { + if (!$tag->hasVariable($matches)) { + throw new \Exception('Could not determine argument name from tag ' . (string)$tag); + } + if ($matches['variable'] == $this->optionParamName()) { + return; + } + $this->addOptionOrArgumentTag($tag, $this->commandInfo->arguments(), $matches['variable'], $matches['description']); + } + + /** + * Store the data from an @option annotation in our option descriptions. + */ + protected function processOptionTag($tag) + { + if (!$tag->hasVariable($matches)) { + throw new \Exception('Could not determine option name from tag ' . (string)$tag); + } + $this->addOptionOrArgumentTag($tag, $this->commandInfo->options(), $matches['variable'], $matches['description']); + } + + protected function addOptionOrArgumentTag($tag, DefaultsWithDescriptions $set, $name, $description) + { + $variableName = $this->commandInfo->findMatchingOption($name); + $description = static::removeLineBreaks($description); + $set->add($variableName, $description); + } + + /** + * Store the data from a @default annotation in our argument or option store, + * as appropriate. + */ + protected function processDefaultTag($tag) + { + if (!$tag->hasVariable($matches)) { + throw new \Exception('Could not determine parameter name for default value from tag ' . (string)$tag); + } + $variableName = $matches['variable']; + $defaultValue = $this->interpretDefaultValue($matches['description']); + if ($this->commandInfo->arguments()->exists($variableName)) { + $this->commandInfo->arguments()->setDefaultValue($variableName, $defaultValue); + return; + } + $variableName = $this->commandInfo->findMatchingOption($variableName); + if ($this->commandInfo->options()->exists($variableName)) { + $this->commandInfo->options()->setDefaultValue($variableName, $defaultValue); + } + } + + /** + * Store the data from a @usage annotation in our example usage list. + */ + protected function processUsageTag($tag) + { + $lines = explode("\n", $tag->getContent()); + $usage = trim(array_shift($lines)); + $description = static::removeLineBreaks(implode("\n", array_map(function ($line) { + return trim($line); + }, $lines))); + + $this->commandInfo->setExampleUsage($usage, $description); + } + + /** + * Process the comma-separated list of aliases + */ + protected function processAliases($tag) + { + $this->commandInfo->setAliases((string)$tag->getContent()); + } + + /** + * Store the data from a @return annotation in our argument descriptions. + */ + protected function processReturnTag($tag) + { + // The return type might be a variable -- '$this'. It will + // usually be a type, like RowsOfFields, or \Namespace\RowsOfFields. + if (!$tag->hasVariableAndDescription($matches)) { + throw new \Exception('Could not determine return type from tag ' . (string)$tag); + } + // Look at namespace and `use` statments to make returnType a fqdn + $returnType = $matches['variable']; + $returnType = $this->findFullyQualifiedClass($returnType); + $this->commandInfo->setReturnType($returnType); + } + + protected function findFullyQualifiedClass($className) + { + if (strpos($className, '\\') !== false) { + return $className; + } + + return $this->fqcnCache->qualify($this->reflection->getFileName(), $className); + } + + private function parseDocBlock($doc) + { + // Remove the leading /** and the trailing */ + $doc = preg_replace('#^\s*/\*+\s*#', '', $doc); + $doc = preg_replace('#\s*\*+/\s*#', '', $doc); + + // Nothing left? Exit. + if (empty($doc)) { + return; + } + + $tagFactory = new TagFactory(); + $lines = []; + + foreach (explode("\n", $doc) as $row) { + // Remove trailing whitespace and leading space + '*'s + $row = rtrim($row); + $row = preg_replace('#^[ \t]*\**#', '', $row); + + if (!$tagFactory->parseLine($row)) { + $lines[] = $row; + } + } + + $this->processDescriptionAndHelp($lines); + $this->processAllTags($tagFactory->getTags()); + } + + protected function processDescriptionAndHelp($lines) + { + // Trim all of the lines individually. + $lines = + array_map( + function ($line) { + return trim($line); + }, + $lines + ); + + // Everything up to the first blank line goes in the description. + $description = array_shift($lines); + while ($this->nextLineIsNotEmpty($lines)) { + $description .= ' ' . array_shift($lines); + } + + // Everything else goes in the help. + $help = trim(implode("\n", $lines)); + + $this->commandInfo->setDescription($description); + $this->commandInfo->setHelp($help); + } + + protected function nextLineIsNotEmpty($lines) + { + if (empty($lines)) { + return false; + } + + $nextLine = trim($lines[0]); + return !empty($nextLine); + } + + protected function processAllTags($tags) + { + // Iterate over all of the tags, and process them as necessary. + foreach ($tags as $tag) { + $processFn = [$this, 'processGenericTag']; + if (array_key_exists($tag->getTag(), $this->tagProcessors)) { + $processFn = [$this, $this->tagProcessors[$tag->getTag()]]; + } + $processFn($tag); + } + } + + protected function lastParameterName() + { + $params = $this->commandInfo->getParameters(); + $param = end($params); + if (!$param) { + return ''; + } + return $param->name; + } + + /** + * Return the name of the last parameter if it holds the options. + */ + public function optionParamName() + { + // Remember the name of the last parameter, if it holds the options. + // We will use this information to ignore @param annotations for the options. + if (!isset($this->optionParamName)) { + $this->optionParamName = ''; + $options = $this->commandInfo->options(); + if (!$options->isEmpty()) { + $this->optionParamName = $this->lastParameterName(); + } + } + + return $this->optionParamName; + } + + protected function interpretDefaultValue($defaultValue) + { + $defaults = [ + 'null' => null, + 'true' => true, + 'false' => false, + "''" => '', + '[]' => [], + ]; + foreach ($defaults as $defaultName => $defaultTypedValue) { + if ($defaultValue == $defaultName) { + return $defaultTypedValue; + } + } + return $defaultValue; + } + + /** + * Given a list that might be 'a b c' or 'a, b, c' or 'a,b,c', + * convert the data into the last of these forms. + */ + protected static function convertListToCommaSeparated($text) + { + return preg_replace('#[ \t\n\r,]+#', ',', $text); + } + + /** + * Take a multiline description and convert it into a single + * long unbroken line. + */ + protected static function removeLineBreaks($text) + { + return trim(preg_replace('#[ \t\n\r]+#', ' ', $text)); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser2.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser2.php deleted file mode 100644 index 22ecad2b..00000000 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser2.php +++ /dev/null @@ -1,70 +0,0 @@ -reflection->getDocComment(); - $phpdoc = new DocBlock($docblockComment); - - // First set the description (synopsis) and help. - $this->commandInfo->setDescription((string)$phpdoc->getShortDescription()); - $this->commandInfo->setHelp((string)$phpdoc->getLongDescription()); - - $this->processAllTags($phpdoc); - } - - protected function getTagContents($tag) - { - return $tag->getContent(); - } - - /** - * Store the data from a @arg annotation in our argument descriptions. - */ - protected function processArgumentTag($tag) - { - if (!$this->pregMatchNameAndDescription((string)$tag->getDescription(), $match)) { - return; - } - $this->addOptionOrArgumentTag($tag, $this->commandInfo->arguments(), $match); - } - - /** - * Store the data from a @param annotation in our argument descriptions. - */ - protected function processParamTag($tag) - { - if (!$tag instanceof ParamTag) { - return; - } - return parent::processParamTag($tag); - } - - /** - * Store the data from a @return annotation in our argument descriptions. - */ - protected function processReturnTag($tag) - { - if (!$tag instanceof ReturnTag) { - return; - } - $this->commandInfo->setReturnType($tag->getType()); - } -} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser3.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser3.php deleted file mode 100644 index ed0eb580..00000000 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser3.php +++ /dev/null @@ -1,74 +0,0 @@ -reflection->getDocComment(); - if (empty($docComment)) { - return; - } - $phpdoc = $this->createDocBlock(); - - // First set the description (synopsis) and help. - $this->commandInfo->setDescription((string)$phpdoc->getSummary()); - $this->commandInfo->setHelp((string)$phpdoc->getDescription()); - - $this->processAllTags($phpdoc); - } - - public function createDocBlock() - { - $docBlockFactory = \phpDocumentor\Reflection\DocBlockFactory::createInstance(); - $contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); - - return $docBlockFactory->create( - $this->reflection, - $contextFactory->createFromReflector($this->reflection) - ); - } - - protected function getTagContents($tag) - { - return (string)$tag; - } - - /** - * Store the data from a @param annotation in our argument descriptions. - */ - protected function processParamTag($tag) - { - if (!$tag instanceof Param) { - return; - } - return parent::processParamTag($tag); - } - - /** - * Store the data from a @return annotation in our argument descriptions. - */ - protected function processReturnTag($tag) - { - if (!$tag instanceof Return_) { - return; - } - // If there is a spurrious trailing space on the return type, remove it. - $this->commandInfo->setReturnType(trim($this->getTagContents($tag))); - } -} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParserFactory.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParserFactory.php index fe1bdecd..3421b749 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParserFactory.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParserFactory.php @@ -15,14 +15,6 @@ class CommandDocBlockParserFactory private static function create(CommandInfo $commandInfo, \ReflectionMethod $reflection) { - if (static::hasReflectionDocBlock3()) { - return new CommandDocBlockParser3($commandInfo, $reflection); - } - return new CommandDocBlockParser2($commandInfo, $reflection); - } - - private static function hasReflectionDocBlock3() - { - return class_exists('phpDocumentor\Reflection\DocBlockFactory') && class_exists('phpDocumentor\Reflection\Types\ContextFactory'); + return new BespokeDocBlockParser($commandInfo, $reflection); } } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CsvUtils.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CsvUtils.php new file mode 100644 index 00000000..88ed3891 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CsvUtils.php @@ -0,0 +1,49 @@ +[^\s$]+)[\s]*'; + const VARIABLE_REGEX = '\\$(?P[^\s$]+)[\s]*'; + const VARIABLE_OR_WORD_REGEX = '\\$?(?P[^\s$]+)[\s]*'; + const TYPE_REGEX = '(?P[^\s$]+)[\s]*'; + const WORD_REGEX = '(?P[^\s$]+)[\s]*'; + const DESCRIPTION_REGEX = '(?P.*)'; + const IS_TAG_REGEX = '/^[*\s]*@/'; + + /** + * Check if the provided string begins with a tag + * @param string $subject + * @return bool + */ + public static function isTag($subject) + { + return preg_match(self::IS_TAG_REGEX, $subject); + } + + /** + * Use a regular expression to separate the tag from the content. + * + * @param string $subject + * @param string[] &$matches Sets $matches['tag'] and $matches['description'] + * @return bool + */ + public static function splitTagAndContent($subject, &$matches) + { + $regex = '/' . self::TAG_REGEX . self::DESCRIPTION_REGEX . '/s'; + return preg_match($regex, $subject, $matches); + } + + /** + * DockblockTag constructor + */ + public function __construct($tag, $content = null) + { + $this->tag = $tag; + $this->content = $content; + } + + /** + * Add more content onto a tag during parsing. + */ + public function appendContent($line) + { + $this->content .= "\n$line"; + } + + /** + * Return the tag - e.g. "@foo description" returns 'foo' + * + * @return string + */ + public function getTag() + { + return $this->tag; + } + + /** + * Return the content portion of the tag - e.g. "@foo bar baz boz" returns + * "bar baz boz" + * + * @return string + */ + public function getContent() + { + return $this->content; + } + + /** + * Convert tag back into a string. + */ + public function __toString() + { + return '@' . $this->getTag() . ' ' . $this->getContent(); + } + + /** + * Determine if tag is one of: + * - "@tag variable description" + * - "@tag $variable description" + * - "@tag type $variable description" + * + * @param string $subject + * @param string[] &$matches Sets $matches['variable'] and + * $matches['description']; might set $matches['type']. + * @return bool + */ + public function hasVariable(&$matches) + { + return + $this->hasTypeVariableAndDescription($matches) || + $this->hasVariableAndDescription($matches); + } + + /** + * Determine if tag is "@tag $variable description" + * @param string $subject + * @param string[] &$matches Sets $matches['variable'] and + * $matches['description'] + * @return bool + */ + public function hasVariableAndDescription(&$matches) + { + $regex = '/^\s*' . self::VARIABLE_OR_WORD_REGEX . self::DESCRIPTION_REGEX . '/s'; + return preg_match($regex, $this->getContent(), $matches); + } + + /** + * Determine if tag is "@tag type $variable description" + * + * @param string $subject + * @param string[] &$matches Sets $matches['variable'], + * $matches['description'] and $matches['type']. + * @return bool + */ + public function hasTypeVariableAndDescription(&$matches) + { + $regex = '/^\s*' . self::TYPE_REGEX . self::VARIABLE_REGEX . self::DESCRIPTION_REGEX . '/s'; + return preg_match($regex, $this->getContent(), $matches); + } + + /** + * Determine if tag is "@tag word description" + * @param string $subject + * @param string[] &$matches Sets $matches['word'] and + * $matches['description'] + * @return bool + */ + public function hasWordAndDescription(&$matches) + { + $regex = '/^\s*' . self::WORD_REGEX . self::DESCRIPTION_REGEX . '/s'; + return preg_match($regex, $this->getContent(), $matches); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/FullyQualifiedClassCache.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/FullyQualifiedClassCache.php new file mode 100644 index 00000000..4daab65a --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/FullyQualifiedClassCache.php @@ -0,0 +1,106 @@ +primeCache($filename, $className); + return $this->cached($filename, $className); + } + + protected function cached($filename, $className) + { + return isset($this->classCache[$filename][$className]) ? $this->classCache[$filename][$className] : $className; + } + + protected function primeCache($filename, $className) + { + // If the cache has already been primed, do no further work + if (isset($this->namespaceCache[$filename])) { + return false; + } + + $handle = fopen($filename, "r"); + if (!$handle) { + return false; + } + + $namespaceName = $this->primeNamespaceCache($filename, $handle); + $this->primeUseCache($filename, $handle); + + // If there is no 'use' statement for the className, then + // generate an effective classname from the namespace + if (!isset($this->classCache[$filename][$className])) { + $this->classCache[$filename][$className] = $namespaceName . '\\' . $className; + } + + fclose($handle); + } + + protected function primeNamespaceCache($filename, $handle) + { + $namespaceName = $this->readNamespace($handle); + if (!$namespaceName) { + return false; + } + $this->namespaceCache[$filename] = $namespaceName; + return $namespaceName; + } + + protected function primeUseCache($filename, $handle) + { + $usedClasses = $this->readUseStatements($handle); + if (empty($usedClasses)) { + return false; + } + $this->classCache[$filename] = $usedClasses; + } + + protected function readNamespace($handle) + { + $namespaceRegex = '#^\s*namespace\s+#'; + $line = $this->readNextRelevantLine($handle); + if (!$line || !preg_match($namespaceRegex, $line)) { + return false; + } + + $namespaceName = preg_replace($namespaceRegex, '', $line); + $namespaceName = rtrim($namespaceName, ';'); + return $namespaceName; + } + + protected function readUseStatements($handle) + { + $useRegex = '#^\s*use\s+#'; + $result = []; + while (true) { + $line = $this->readNextRelevantLine($handle); + if (!$line || !preg_match($useRegex, $line)) { + return $result; + } + $usedClass = preg_replace($useRegex, '', $line); + $usedClass = rtrim($usedClass, ';'); + $unqualifiedClass = preg_replace('#.*\\\\#', '', $usedClass); + // If this is an aliased class, 'use \Foo\Bar as Baz', then adjust + if (strpos($usedClass, ' as ')) { + $unqualifiedClass = preg_replace('#.*\sas\s+#', '', $usedClass); + $usedClass = preg_replace('#\s+as\s+#', '', $usedClass); + } + $result[$unqualifiedClass] = $usedClass; + } + } + + protected function readNextRelevantLine($handle) + { + while (($line = fgets($handle)) !== false) { + if (preg_match('#^\s*\w#', $line)) { + return trim($line); + } + } + return false; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/TagFactory.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/TagFactory.php new file mode 100644 index 00000000..4c48679d --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/TagFactory.php @@ -0,0 +1,67 @@ +current = null; + $this->tags = []; + } + + public function parseLine($line) + { + if (DocblockTag::isTag($line)) { + return $this->createTag($line); + } + if (empty($line)) { + return $this->storeCurrentTag(); + } + return $this->accumulateContent($line); + } + + public function getTags() + { + $this->storeCurrentTag(); + return $this->tags; + } + + protected function createTag($line) + { + DocblockTag::splitTagAndContent($line, $matches); + $this->storeCurrentTag(); + $this->current = new DocblockTag($matches['tag'], $matches['description']); + return true; + } + + protected function storeCurrentTag() + { + if (!$this->current) { + return false; + } + $this->tags[] = $this->current; + $this->current = false; + return true; + } + + protected function accumulateContent($line) + { + if (!$this->current) { + return false; + } + $this->current->appendContent($line); + return true; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/FullyQualifiedClassCacheTests.php b/lib/composer/vendor/consolidation/annotated-command/tests/FullyQualifiedClassCacheTests.php new file mode 100644 index 00000000..dc913e70 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/tests/FullyQualifiedClassCacheTests.php @@ -0,0 +1,59 @@ +getFileName(); + + $fqcnCache = new FullyQualifiedClassCache(); + + $handle = fopen($filename, "r"); + $this->assertTrue($handle !== false); + + $namespaceName = $this->callProtected($fqcnCache, 'readNamespace', [$handle]); + + $this->assertEquals('Consolidation\TestUtils\alpha', $namespaceName); + + $usedClasses = $this->callProtected($fqcnCache, 'readUseStatements', [$handle]); + + $this->assertTrue(isset($usedClasses['RowsOfFields'])); + $this->assertEquals('Consolidation\OutputFormatters\StructuredData\RowsOfFields', $usedClasses['RowsOfFields']); + + fclose($handle); + + $fqcn = $fqcnCache->qualify($filename, 'RowsOfFields'); + $this->assertEquals('Consolidation\OutputFormatters\StructuredData\RowsOfFields', $fqcn); + + $fqcn = $fqcnCache->qualify($filename, 'ClassWithoutUse'); + $this->assertEquals('Consolidation\TestUtils\alpha\ClassWithoutUse', $fqcn); + + $fqcn = $fqcnCache->qualify($filename, 'ExampleAliasedClass'); + $this->assertEquals('Consolidation\TestUtils\ExampleCommandFile', $fqcn); + } + + function callProtected($object, $method, $args = []) + { + $r = new \ReflectionMethod($object, $method); + $r->setAccessible(true); + return $r->invokeArgs($object, $args); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleAnnotatedCommand.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleAnnotatedCommand.php index e114f8be..6b4c6c5f 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleAnnotatedCommand.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleAnnotatedCommand.php @@ -19,12 +19,12 @@ class ExampleAnnotatedCommand extends AnnotatedCommand /** * Do the main function of the my:cat command. */ - public function myCat($one, $two = '', $flip = false) + public function myCat($one, $two = '', $multiple = [], $flip = false) { if ($flip) { - return "{$two}{$one}"; + return "{$two}{$one}" . implode('', array_reverse($multiple)); } - return "{$one}{$two}"; + return "{$one}{$two}" . implode('', $multiple); } /** @@ -37,6 +37,8 @@ class ExampleAnnotatedCommand extends AnnotatedCommand * @arg string $one The first parameter. * @arg string $two The other parameter. * @default $two '' + * @option array $multiple An array of values + * @default $multiple [] * @option boolean $flip Whether or not the second parameter should come first in the result. * @aliases c * @usage bet alpha --flip @@ -46,9 +48,10 @@ class ExampleAnnotatedCommand extends AnnotatedCommand { $one = $input->getArgument('one'); $two = $input->getArgument('two'); + $multiple = $input->getOption('multiple'); $flip = $input->getOption('flip'); - $result = $this->myCat($one, $two, $flip); + $result = $this->myCat($one, $two, $multiple, $flip); // We could also just use $output->writeln($result) here, // but calling processResults enables the use of output diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleCommandFile.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleCommandFile.php index 3c6d8a0d..1a9afef5 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleCommandFile.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleCommandFile.php @@ -7,6 +7,7 @@ use Consolidation\AnnotatedCommand\CommandError; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** @@ -32,6 +33,65 @@ class ExampleCommandFile $this->output = $output; } + /** + * Import config from a config directory. + * + * @command config:import + * @param $label A config directory label (i.e. a key in \$config_directories array in settings.php). + * @interact-config-label + * @option preview Format for displaying proposed changes. Recognized values: list, diff. + * @option source An arbitrary directory that holds the configuration files. An alternative to label argument + * @option partial Allows for partial config imports from the source directory. Only updates and new configs will be processed with this flag (missing configs will not be deleted). + * @aliases cim,config-import + */ + public function import($label = null, $options = ['preview' => 'list', 'source' => InputOption::VALUE_REQUIRED, 'partial' => false]) + { + } + + /** + * Calculate the fibonacci sequence between two numbers. + * + * Graphic output will look like + * +----+---+-------------+ + * | | | | + * | |-+-| | + * |----+-+-+ | + * | | | + * | | | + * | | | + * +--------+-------------+ + * + * @param int $start Number to start from + * @param int $steps Number of steps to perform + * @param array $opts + * @option $graphic Display the sequence graphically using cube + * representation + */ + public function fibonacci($start, $steps, $opts = ['graphic' => false]) + { + } + + /** + * Code sniffer. + * + * Run the PHP Codesniffer on a file or directory. + * + * @param string $file + * A file or directory to analyze. + * @option $autofix Whether to run the automatic fixer or not. + * @option $strict Show warnings as well as errors. + * Default is to show only errors. + */ + public function sniff( + $file = 'src', + array $options = [ + 'autofix' => false, + 'strict' => false, + ] + ) { + return var_export($options, true); + } + /** * This is the my:cat command * @@ -46,7 +106,7 @@ class ExampleCommandFile * Concatenate "alpha" and "bet". * @arbitrary This annotation is here merely as a marker used in testing. */ - public function myCat($one, $two = '', $options = ['flip' => false]) + public function myCat($one, $two = '', array $options = ['flip' => false]) { if ($options['flip']) { return "{$two}{$one}"; @@ -57,15 +117,23 @@ class ExampleCommandFile /** * @command my:repeat */ - public function myRepeat($one, $two = '', $options = ['repeat' => 1]) + public function myRepeat($one, $two = '', array $options = ['repeat' => 1]) { return str_repeat("{$one}{$two}", $options['repeat']); } /** + * This is the my:join command + * + * This command will join its parameters together. It can also reverse and repeat its arguments. + * * @command my:join + * @usage a b + * Join a and b to produce "a,b" + * @usage + * Example with no parameters or options */ - public function myJoin(array $args, $options = ['flip' => false, 'repeat' => 1]) + public function myJoin(array $args, array $options = ['flip' => false, 'repeat' => 1]) { if ($options['flip']) { $args = array_reverse($args); @@ -90,6 +158,16 @@ class ExampleCommandFile return "{$one}{$two}"; } + /** + * This command work with app's input and output + * + * @command command:with-io-parameters + */ + public function commandWithIOParameters(InputInterface $input, OutputInterface $output) + { + return $input->getFirstArgument(); + } + /** * This command has no arguments--only options * @@ -97,7 +175,7 @@ class ExampleCommandFile * * @option silent Supress output. */ - public function commandWithNoArguments($opts = ['silent|s' => false]) + public function commandWithNoArguments(array $opts = ['silent|s' => false]) { if (!$opts['silent']) { return "Hello, world"; @@ -112,7 +190,7 @@ class ExampleCommandFile * @param $opts The options * @option silent|s Supress output. */ - public function shortcutOnAnnotation($opts = ['silent' => false]) + public function shortcutOnAnnotation(array $opts = ['silent' => false]) { if (!$opts['silent']) { return "Hello, world"; @@ -133,8 +211,10 @@ class ExampleCommandFile * @usage 2 2 --negate * Add two plus two and then negate. * @custom + * @dup one + * @dup two */ - public function testArithmatic($one, $two, $options = ['negate' => false]) + public function testArithmatic($one, $two = 2, array $options = ['negate' => false, 'unused' => 'bob']) { $result = $one + $two; if ($options['negate']) { @@ -246,6 +326,22 @@ class ExampleCommandFile return "fantabulous"; } + /** + * @command test:replace-command + */ + public function testReplaceCommand($value) + { + $this->output->writeln($value); + } + + /** + * @hook replace-command test:replace-command + */ + public function hookTestReplaceCommandHook($value) + { + $this->output->writeln("bar"); + } + /** * @hook pre-command test:post-command */ @@ -348,4 +444,78 @@ class ExampleCommandFile } return "nothing provided"; } + + /** + * @return string + */ + public function defaultOptionOne(array $options = ['foo' => '1']) + { + return "Foo is " . $options['foo']; + } + + /** + * @return string + */ + public function defaultOptionTwo(array $options = ['foo' => '2']) + { + return "Foo is " . $options['foo']; + } + + /** + * @return string + */ + public function defaultOptionNone(array $options = ['foo' => InputOption::VALUE_REQUIRED]) + { + return "Foo is " . $options['foo']; + } + + /** + * @return string + */ + public function defaultOptionalValue(array $options = ['foo' => InputOption::VALUE_OPTIONAL]) + { + return "Foo is " . var_export($options['foo'], true); + } + + /** + * @return string + */ + public function defaultOptionDefaultsToTrue(array $options = ['foo' => true]) + { + return "Foo is " . var_export($options['foo'], true); + } + + /** + * This is the test:required-array-option command + * + * This command will print all the valused of passed option + * + * @param array $opts + * @return string + */ + public function testRequiredArrayOption(array $opts = ['arr|a' => []]) + { + return implode(' ', $opts['arr']); + } + + /** + * This is the test:array-option command + * + * This command will print all the valused of passed option + * + * @param array $opts + * @return string + */ + public function testArrayOption(array $opts = ['arr|a' => ['1', '2', '3']]) + { + return implode(' ', $opts['arr']); + } + + /** + * @command global-options-only + */ + public function globalOptionsOnly($arg, array $options = []) + { + return "Arg is $arg, options[help] is " . var_export($options['help'], true) . "\n"; + } } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/InMemoryCacheStore.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/InMemoryCacheStore.php new file mode 100644 index 00000000..134d87a0 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/InMemoryCacheStore.php @@ -0,0 +1,50 @@ +cache = []; + } + + /** + * Test for an entry from the cache + * @param string $key + * @return boolean + */ + public function has($key) + { + return array_key_exists($key, $this->cache); + } + + /** + * Get an entry from the cache + * @param string $key + * @return array + */ + public function get($key) + { + if (!$this->has($key)) { + return []; + } + return $this->cache[$key]; + } + + /** + * Store an entry in the cache + * @param string $key + * @param array $data + */ + public function set($key, $data) + { + $this->cache[$key] = $data; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/TestTerminal.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/TestTerminal.php new file mode 100644 index 00000000..cfcbf975 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/TestTerminal.php @@ -0,0 +1,22 @@ +width = $width; + } + + public function getWidth() + { + return $this->width; + } + + public function setWidth($width) + { + $this->width = $width; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/alpha/AlphaCommandFile.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/alpha/AlphaCommandFile.php index a58817ba..651b8533 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/src/alpha/AlphaCommandFile.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/alpha/AlphaCommandFile.php @@ -7,6 +7,11 @@ use Consolidation\OutputFormatters\StructuredData\AssociativeList; use Consolidation\AnnotatedCommand\AnnotationData; use Symfony\Component\Console\Input\InputOption; use Consolidation\AnnotatedCommand\CommandData; +use Consolidation\AnnotatedCommand\Events\CustomEventAwareInterface; +use Consolidation\AnnotatedCommand\Events\CustomEventAwareTrait; +use Symfony\Component\Console\Command\Command; + +use Consolidation\TestUtils\ExampleCommandFile as ExampleAliasedClass; /** * Test file used in the testCommandDiscovery() test. @@ -15,8 +20,10 @@ use Consolidation\AnnotatedCommand\CommandData; * 'src' directory, and 'alpha' is one of the search directories available * for searching. */ -class AlphaCommandFile +class AlphaCommandFile implements CustomEventAwareInterface { + use CustomEventAwareTrait; + /** * @command always:fail */ @@ -25,6 +32,11 @@ class AlphaCommandFile return new CommandError('This command always fails.', 13); } + public static function ignoredStaticMethod() + { + return 'This method is static; it should not generate a command.'; + } + /** * @command simulated:status */ @@ -72,17 +84,52 @@ class AlphaCommandFile * Test command with formatters * * @command example:table + * @param $unused An unused argument * @field-labels * first: I * second: II * third: III - * @usage example:table --format=yaml - * @usage example:table --format=csv + * @usage example:table --format=yml + * Show the example table in yml format. * @usage example:table --fields=first,third - * @usage example:table --fields=III,II - * @return \Consolidation\OutputFormatters\StructuredData\RowsOfFields + * Show only the first and third fields in the table. + * @usage example:table --fields=II,III + * Note that either the field ID or the visible field label may be used. + * @aliases extab + * @topics docs-tables + * @return \Consolidation\OutputFormatters\StructuredData\RowsOfFields Fully-qualified class name */ - public function exampleTable($options = ['format' => 'table', 'fields' => '']) + public function exampleTable($unused = '', $options = ['format' => 'table', 'fields' => '']) + { + $outputData = [ + [ 'first' => 'One', 'second' => 'Two', 'third' => 'Three' ], + [ 'first' => 'Eins', 'second' => 'Zwei', 'third' => 'Drei' ], + [ 'first' => 'Ichi', 'second' => 'Ni', 'third' => 'San' ], + [ 'first' => 'Uno', 'second' => 'Dos', 'third' => 'Tres' ], + ]; + return new RowsOfFields($outputData); + } + + /** + * Test command with formatters using a short classname in @return + * + * @command example:table2 + * @param $unused An unused argument + * @field-labels + * first: I + * second: II + * third: III + * @usage example:table --format=yml + * Show the example table in yml format. + * @usage example:table --fields=first,third + * Show only the first and third fields in the table. + * @usage example:table --fields=II,III + * Note that either the field ID or the visible field label may be used. + * @aliases extab + * @topics docs-tables + * @return RowsOfFields Short class names are converted to fqcns + */ + public function exampleTableTwo($unused = '', $options = ['format' => 'table', 'fields' => '']) { $outputData = [ [ 'first' => 'One', 'second' => 'Two', 'third' => 'Three' ], @@ -117,7 +164,7 @@ class AlphaCommandFile /** * @hook option example:table */ - public function additionalOptionForExampleTable($command, $annotationData) + public function additionalOptionForExampleTable(Command $command, AnnotationData $annotationData) { $command->addOption( 'dynamic', @@ -240,4 +287,39 @@ class AlphaCommandFile { return 'very lost'; } + + /** + * This command uses a custom event 'my-event' to collect data. Note that + * the event handlers will not be found unless the hook manager is + * injected into this command handler object via `setHookManager()` + * (defined in CustomEventAwareTrait). + * + * @command use:event + */ + public function useEvent() + { + $myEventHandlers = $this->getCustomEventHandlers('my-event'); + $result = []; + foreach ($myEventHandlers as $handler) { + $result[] = $handler(); + } + sort($result); + return implode(',', $result); + } + + /** + * @hook on-event my-event + */ + public function hookOne() + { + return 'one'; + } + + /** + * @hook on-event my-event + */ + public function hookTwo() + { + return 'two'; + } } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommand.php b/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommand.php index 098be138..887300ed 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommand.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommand.php @@ -20,10 +20,10 @@ class AnnotatedCommandTests extends \PHPUnit_Framework_TestCase $this->assertEquals("This command will concatenate two parameters. If the --flip flag\nis provided, then the result is the concatenation of two and one.", $command->getHelp()); $this->assertEquals('c', implode(',', $command->getAliases())); // Symfony Console composes the synopsis; perhaps we should not test it. Remove if this gives false failures. - $this->assertEquals('my:cat [--flip] [--] []', $command->getSynopsis()); + $this->assertEquals('my:cat [--multiple MULTIPLE] [--flip] [--] []', $command->getSynopsis()); $this->assertEquals('my:cat bet alpha --flip', implode(',', $command->getUsages())); - $input = new StringInput('my:cat bet alpha --flip'); + $input = new StringInput('my:cat b alpha --multiple=t --multiple=e --flip'); $this->assertRunCommandViaApplicationEquals($command, $input, 'alphabet'); } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommandFactory.php b/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommandFactory.php index 1a0755d7..551721e8 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommandFactory.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommandFactory.php @@ -10,6 +10,7 @@ use Consolidation\TestUtils\ExampleCommandInfoAlterer; use Symfony\Component\Console\Application; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Output\BufferedOutput; use Symfony\Component\Console\Output\OutputInterface; @@ -19,6 +20,207 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase protected $commandFileInstance; protected $commandFactory; + function testFibonacci() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'fibonacci'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('fibonacci', $command->getName()); + $this->assertEquals('fibonacci [--graphic] [--] ', $command->getSynopsis()); + $this->assertEquals('Calculate the fibonacci sequence between two numbers.', $command->getDescription()); + $this->assertEquals("Graphic output will look like ++----+---+-------------+ +| | | | +| |-+-| | +|----+-+-+ | +| | | +| | | +| | | ++--------+-------------+", $command->getHelp()); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + + $input = new StringInput('help fibonacci'); + $this->assertRunCommandViaApplicationContains($command, $input, ['Display the sequence graphically using cube representation']); + } + + function testSniff() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'sniff'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('sniff', $command->getName()); + $this->assertEquals('sniff [--autofix] [--strict] [--] []', $command->getSynopsis()); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + + $input = new StringInput('help sniff'); + $this->assertRunCommandViaApplicationContains($command, $input, ['A file or directory to analyze.']); + + $input = new StringInput('sniff --autofix --strict -- foo'); + $this->assertRunCommandViaApplicationContains($command, $input, ["'autofix' => true", + "'strict' => true"]); + } + + function testOptionDefaultValue() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionOne'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('default:option-one', $command->getName()); + $this->assertEquals('default:option-one [--foo [FOO]]', $command->getSynopsis()); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + + $input = new StringInput('default:option-one'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is 1'); + + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionTwo'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('default:option-two', $command->getName()); + $this->assertEquals('default:option-two [--foo [FOO]]', $command->getSynopsis()); + + $input = new StringInput('default:option-two'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is 2'); + + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionNone'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('default:option-none', $command->getName()); + $this->assertEquals('default:option-none [--foo FOO]', $command->getSynopsis()); + + // Skip failing test until Symfony is fixed. + $this->markTestSkipped('Symfony Console 3.2.5 and 3.2.6 do not handle default options with required values correctly.'); + + $input = new StringInput('default:option-none --foo'); + $this->assertRunCommandViaApplicationContains($command, $input, ['The "--foo" option requires a value.'], 1); + } + + function testGlobalOptionsOnly() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'globalOptionsOnly'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $input = new StringInput('global-options-only test'); + $this->assertRunCommandViaApplicationEquals($command, $input, "Arg is test, options[help] is false"); + } + + function testOptionWithOptionalValue() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionalValue'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + // Test to see if we can differentiate between a missing option, and + // an option that has no value at all. + $input = new StringInput('default:optional-value --foo=bar'); + $this->assertRunCommandViaApplicationEquals($command, $input, "Foo is 'bar'"); + + $input = new StringInput('default:optional-value --foo'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is true'); + + $input = new StringInput('default:optional-value'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is NULL'); + } + + function testOptionThatDefaultsToTrue() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionDefaultsToTrue'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + // Test to see if we can differentiate between a missing option, and + // an option that has no value at all. + $input = new StringInput('default:option-defaults-to-true --foo=bar'); + $this->assertRunCommandViaApplicationEquals($command, $input, "Foo is 'bar'"); + + $input = new StringInput('default:option-defaults-to-true --foo'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is true'); + + $input = new StringInput('default:option-defaults-to-true'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is true'); + + $input = new StringInput('help default:option-defaults-to-true'); + $this->assertRunCommandViaApplicationContains( + $command, + $input, + [ + '--no-foo', + 'Negate --foo option', + ] + ); + $input = new StringInput('default:option-defaults-to-true --no-foo'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is false'); + } + /** + * Test CommandInfo command caching. + * + * Sequence: + * - Create all of the command info objects from one class, caching them. + * - Change the method name of one of the items in the cache to a non-existent method + * - Restore all of the cached commandinfo objects + * - Ensure that the non-existent method cached commandinfo was not created + * - Ensure that the now-missing cached commandinfo was still created + * + * This tests both save/restore, plus adding a new command method to + * a class, and removing a command method from a class. + */ + function testAnnotatedCommandCache() + { + $testCacheStore = new \Consolidation\TestUtils\InMemoryCacheStore(); + + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $this->commandFactory->setDataStore($testCacheStore); + + // Make commandInfo objects for every command in the test commandfile. + // These will also be stored in our cache. + $commandInfoList = $this->commandFactory->getCommandInfoListFromClass($this->commandFileInstance); + + $cachedClassName = get_class($this->commandFileInstance); + + $this->assertTrue($testCacheStore->has($cachedClassName)); + + $cachedData = $testCacheStore->get($cachedClassName); + $this->assertFalse(empty($cachedData)); + $this->assertTrue(array_key_exists('testArithmatic', $cachedData)); + + $alterCommandInfoCache = $cachedData['testArithmatic']; + unset($cachedData['testArithmatic']); + $alterCommandInfoCache['method_name'] = 'nonExistentMethod'; + $cachedData[$alterCommandInfoCache['method_name']] = $alterCommandInfoCache; + + $testCacheStore->set($cachedClassName, $cachedData); + + $restoredCommandInfoList = $this->commandFactory->getCommandInfoListFromClass($this->commandFileInstance); + + $rebuiltCachedData = $testCacheStore->get($cachedClassName); + + $this->assertFalse(empty($rebuiltCachedData)); + $this->assertTrue(array_key_exists('testArithmatic', $rebuiltCachedData)); + $this->assertFalse(array_key_exists('nonExistentMethod', $rebuiltCachedData)); + } + /** * Test CommandInfo command annotation parsing. */ @@ -35,7 +237,7 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase $this->assertEquals('This is the test:arithmatic command', $command->getDescription()); $this->assertEquals("This command will add one and two. If the --negate flag\nis provided, then the result is negated.", $command->getHelp()); $this->assertEquals('arithmatic', implode(',', $command->getAliases())); - $this->assertEquals('test:arithmatic [--negate] [--] ', $command->getSynopsis()); + $this->assertEquals('test:arithmatic [--negate] [--unused [UNUSED]] [--] []', $command->getSynopsis()); $this->assertEquals('test:arithmatic 2 2 --negate', implode(',', $command->getUsages())); $input = new StringInput('arithmatic 2 3 --negate'); @@ -86,6 +288,29 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase $this->assertRunCommandViaApplicationEquals($command, $input, 'alphabet'); } + function testJoinCommandHelp() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'myJoin'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + $this->assertEquals('my:join', $command->getName()); + $this->assertEquals('This is the my:join command', $command->getDescription()); + $this->assertEquals("This command will join its parameters together. It can also reverse and repeat its arguments.", $command->getHelp()); + $this->assertEquals('my:join [--flip] [--repeat [REPEAT]] [--] []...', $command->getSynopsis()); + + // TODO: Extra whitespace character if there are no options et. al. in the + // usage. This is uncommon, and the defect is invisible. Maybe find it someday. + $actualUsages = implode(',', $command->getUsages()); + $this->assertEquals('my:join a b,my:join ', $actualUsages); + + $input = new StringInput('my:join bet alpha --flip --repeat=2'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'alphabetalphabet'); + } + function testDefaultsCommand() { $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; @@ -126,6 +351,34 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase $input = new StringInput('command:with-no-options something'); $this->assertRunCommandViaApplicationEquals($command, $input, 'somethingdefault'); + + $input = new StringInput('help command:with-no-options something'); + $this->assertRunCommandViaApplicationContains( + $command, + $input, + [ + 'The first parameter.', + 'The other parameter.', + ] + ); + } + + function testCommandWithIOParameters() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'commandWithIOParameters'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + $this->assertEquals('command:with-io-parameters', $command->getName()); + $this->assertEquals("This command work with app's input and output", $command->getDescription()); + $this->assertEquals('', $command->getHelp()); + $this->assertEquals('command:with-io-parameters', $command->getSynopsis()); + + $input = new StringInput('command:with-io-parameters'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'command:with-io-parameters'); } function testCommandWithNoArguments() @@ -237,6 +490,41 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase $this->assertRunCommandViaApplicationEquals($command, $input, 'betxyzbetxyz'); } + function testRequiredArrayOption() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'testRequiredArrayOption'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('test:required-array-option [-a|--arr ARR]', $command->getSynopsis()); + + $input = new StringInput('test:required-array-option --arr=1 --arr=2 --arr=3'); + $this->assertRunCommandViaApplicationEquals($command, $input, '1 2 3'); + + $input = new StringInput('test:required-array-option -a 1 -a 2 -a 3'); + $this->assertRunCommandViaApplicationEquals($command, $input, '1 2 3'); + } + + function testArrayOption() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'testArrayOption'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('test:array-option [-a|--arr [ARR]]', $command->getSynopsis()); + + $input = new StringInput('test:array-option'); + $this->assertRunCommandViaApplicationEquals($command, $input, '1 2 3'); + + $input = new StringInput('test:array-option --arr=a --arr=b --arr=c'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'a b c'); + + $input = new StringInput('test:array-option -a a'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'a'); + } + function testHookedCommand() { $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile(); @@ -264,6 +552,33 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase $input = new StringInput('test:hook bar'); $this->assertRunCommandViaApplicationEquals($command, $input, '<[bar]>'); + + $input = new StringInput('list --raw'); + $this->assertRunCommandViaApplicationContains($command, $input, ['This command wraps its parameter in []; its alter hook then wraps the result in .']); + } + + function testReplaceCommandHook(){ + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile(); + $this->commandFactory = new AnnotatedCommandFactory(); + + $hookInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'hookTestReplaceCommandHook'); + + $this->assertTrue($hookInfo->hasAnnotation('hook')); + $this->assertEquals('replace-command test:replace-command', $hookInfo->getAnnotation('hook')); + + $this->commandFactory->registerCommandHook($hookInfo, $this->commandFileInstance); + + $hookCallback = $this->commandFactory->hookManager()->get('test:replace-command', [HookManager::REPLACE_COMMAND_HOOK]); + $this->assertTrue($hookCallback != null); + $this->assertEquals(1, count($hookCallback)); + $this->assertEquals(2, count($hookCallback[0])); + $this->assertTrue(is_callable($hookCallback[0])); + $this->assertEquals('hookTestReplaceCommandHook', $hookCallback[0][1]); + + $input = new StringInput('test:replace-command foo'); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'testReplaceCommand'); + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertRunCommandViaApplicationEquals($command, $input, "bar", 0); } function testPostCommandCalledAfterCommand() @@ -338,6 +653,22 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase $this->assertRunCommandViaApplicationEquals($command, $input, '*** bar ***'); } + function testDoubleDashWithVersion() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleHookAllCommandFile(); + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'doCat'); + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $input = new ArgvInput(['placeholder', 'do:cat', 'one', '--', '--version']); + list($statusCode, $commandOutput) = $this->runCommandViaApplication($command, $input); + + if ($commandOutput == 'TestApplication version 0.0.0') { + $this->markTestSkipped('Symfony/Console 2.x does not respect -- with --version'); + } + $this->assertEquals('one--version', $commandOutput); + } + function testAnnotatedHookedCommand() { $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile(); @@ -404,7 +735,7 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase $annotationData = $commandInfo->getRawAnnotations(); $this->assertEquals('addmycommandname', implode(',', $annotationData->keys())); $annotationData = $commandInfo->getAnnotations(); - $this->assertEquals('addmycommandname,command', implode(',', $annotationData->keys())); + $this->assertEquals('addmycommandname,command,_path,_classname', implode(',', $annotationData->keys())); $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); @@ -415,7 +746,6 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase $this->assertRunCommandViaApplicationEquals($command, $input, 'fantabulous from alter:me-too'); } - function testHookedCommandWithHookAddedLater() { $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile(); @@ -612,7 +942,25 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase return $r->invokeArgs($object, $args); } + function assertRunCommandViaApplicationContains($command, $input, $containsList, $expectedStatusCode = 0) + { + list($statusCode, $commandOutput) = $this->runCommandViaApplication($command, $input); + + foreach ($containsList as $contains) { + $this->assertContains($contains, $commandOutput); + } + $this->assertEquals($expectedStatusCode, $statusCode); + } + function assertRunCommandViaApplicationEquals($command, $input, $expectedOutput, $expectedStatusCode = 0) + { + list($statusCode, $commandOutput) = $this->runCommandViaApplication($command, $input); + + $this->assertEquals($expectedOutput, $commandOutput); + $this->assertEquals($expectedStatusCode, $statusCode); + } + + function runCommandViaApplication($command, $input) { $output = new BufferedOutput(); if ($this->commandFileInstance && method_exists($this->commandFileInstance, 'setOutput')) { @@ -624,16 +972,15 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); $eventDispatcher->addSubscriber($this->commandFactory->commandProcessor()->hookManager()); - $eventDispatcher->addSubscriber($alterOptionsEventManager); + $this->commandFactory->commandProcessor()->hookManager()->addCommandEvent($alterOptionsEventManager); $application->setDispatcher($eventDispatcher); $application->setAutoExit(false); $application->add($command); $statusCode = $application->run($input, $output); - $commandOutput = trim($output->fetch()); + $commandOutput = trim(str_replace("\r", '', $output->fetch())); - $this->assertEquals($expectedOutput, $commandOutput); - $this->assertEquals($expectedStatusCode, $statusCode); + return [$statusCode, $commandOutput]; } } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testCommandInfo.php b/lib/composer/vendor/consolidation/annotated-command/tests/testCommandInfo.php index 29fb2ebf..68547414 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/testCommandInfo.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testCommandInfo.php @@ -2,6 +2,8 @@ namespace Consolidation\AnnotatedCommand; use Consolidation\AnnotatedCommand\Parser\CommandInfo; +use Consolidation\AnnotatedCommand\Parser\CommandInfoSerializer; +use Consolidation\AnnotatedCommand\Parser\CommandInfoDeserializer; class CommandInfoTests extends \PHPUnit_Framework_TestCase { @@ -22,8 +24,31 @@ class CommandInfoTests extends \PHPUnit_Framework_TestCase */ function testParsing() { - $commandInfo = new CommandInfo('\Consolidation\TestUtils\ExampleCommandFile', 'testArithmatic'); + $commandInfo = CommandInfo::create('\Consolidation\TestUtils\ExampleCommandFile', 'testArithmatic'); + $this->assertCommandInfoIsAsExpected($commandInfo); + $serializer = new CommandInfoSerializer(); + $serialized = $serializer->serialize($commandInfo); + + $deserializer = new CommandInfoDeserializer(); + + $deserializedCommandInfo = $deserializer->deserialize($serialized); + $this->assertCommandInfoIsAsExpected($deserializedCommandInfo); + } + + function testWithConfigImport() + { + $commandInfo = CommandInfo::create('\Consolidation\TestUtils\ExampleCommandFile', 'import'); + $this->assertEquals('config:import', $commandInfo->getName()); + + $this->assertEquals( + 'A config directory label (i.e. a key in \$config_directories array in settings.php).', + $commandInfo->arguments()->getDescription('label') + ); + } + + function assertCommandInfoIsAsExpected($commandInfo) + { $this->assertEquals('test:arithmatic', $commandInfo->getName()); $this->assertEquals( 'This is the test:arithmatic command', @@ -46,15 +71,31 @@ class CommandInfoTests extends \PHPUnit_Framework_TestCase 'The other number to add.', $commandInfo->arguments()->getDescription('two') ); + $this->assertEquals( + '2', + $commandInfo->arguments()->get('two') + ); $this->assertEquals( 'Whether or not the result should be negated.', $commandInfo->options()->getDescription('negate') ); + $this->assertEquals( + 'bob', + $commandInfo->options()->get('unused') + ); + $this->assertEquals( + 'one,two', + $commandInfo->getAnnotation('dup') + ); + $this->assertEquals( + ['one','two'], + $commandInfo->getAnnotationList('dup') + ); } function testReturnValue() { - $commandInfo = new CommandInfo('\Consolidation\TestUtils\alpha\AlphaCommandFile', 'exampleTable'); + $commandInfo = CommandInfo::create('\Consolidation\TestUtils\alpha\AlphaCommandFile', 'exampleTable'); $this->assertEquals('example:table', $commandInfo->getName()); $this->assertEquals('\Consolidation\OutputFormatters\StructuredData\RowsOfFields', $commandInfo->getReturnType()); } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testFullStack.php b/lib/composer/vendor/consolidation/annotated-command/tests/testFullStack.php index 8f3e10ad..5fb37219 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/testFullStack.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testFullStack.php @@ -13,6 +13,7 @@ use Consolidation\AnnotatedCommand\Hooks\ValidatorInterface; use Consolidation\AnnotatedCommand\Options\AlterOptionsCommandEvent; use Consolidation\AnnotatedCommand\Parser\CommandInfo; use Consolidation\OutputFormatters\FormatterManager; +use Consolidation\TestUtils\TestTerminal; use Symfony\Component\Console\Application; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; @@ -21,6 +22,8 @@ use Symfony\Component\Console\Output\BufferedOutput; use Symfony\Component\Console\Output\OutputInterface; use Consolidation\TestUtils\ApplicationWithTerminalWidth; use Consolidation\AnnotatedCommand\Options\PrepareTerminalWidthOption; +use Consolidation\AnnotatedCommand\Events\CustomEventAwareInterface; +use Consolidation\AnnotatedCommand\Events\CustomEventAwareTrait; /** * Do a test of all of the classes in this project, top-to-bottom. @@ -36,7 +39,7 @@ class FullStackTests extends \PHPUnit_Framework_TestCase $alterOptionsEventManager = new AlterOptionsCommandEvent($this->application); $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); $eventDispatcher->addSubscriber($this->commandFactory->commandProcessor()->hookManager()); - $eventDispatcher->addSubscriber($alterOptionsEventManager); + $this->commandFactory->commandProcessor()->hookManager()->addCommandEvent($alterOptionsEventManager); $this->application->setDispatcher($eventDispatcher); $this->application->setAutoExit(false); } @@ -46,7 +49,7 @@ class FullStackTests extends \PHPUnit_Framework_TestCase $formatter = new FormatterManager(); $formatter->addDefaultFormatters(); $formatter->addDefaultSimplifiers(); - $commandInfo = new CommandInfo('\Consolidation\TestUtils\alpha\AlphaCommandFile', 'exampleTable'); + $commandInfo = CommandInfo::create('\Consolidation\TestUtils\alpha\AlphaCommandFile', 'exampleTable'); $this->assertEquals('example:table', $commandInfo->getName()); $this->assertEquals('\Consolidation\OutputFormatters\StructuredData\RowsOfFields', $commandInfo->getReturnType()); } @@ -59,7 +62,13 @@ class FullStackTests extends \PHPUnit_Framework_TestCase $formatter->addDefaultSimplifiers(); $this->commandFactory->commandProcessor()->setFormatterManager($formatter); - $commandInfo = $this->commandFactory->createCommandInfo($commandFileInstance, 'exampleTable'); + $this->assertAutomaticOptionsForCommand($commandFileInstance, 'exampleTable', 'example:table'); + $this->assertAutomaticOptionsForCommand($commandFileInstance, 'exampleTableTwo', 'example:table2'); + } + + function assertAutomaticOptionsForCommand($commandFileInstance, $functionName, $commandName) + { + $commandInfo = $this->commandFactory->createCommandInfo($commandFileInstance, $functionName); $command = $this->commandFactory->createCommand($commandInfo, $commandFileInstance); $this->application->add($command); @@ -69,7 +78,7 @@ class FullStackTests extends \PHPUnit_Framework_TestCase '--format[=FORMAT] Format the result data. Available formats: csv,json,list,php,print-r,sections,string,table,tsv,var_export,xml,yaml [default: "table"]', '--fields[=FIELDS] Available fields: I (first), II (second), III (third) [default: ""]', ]; - $this->assertRunCommandViaApplicationContains('help example:table', $containsList); + $this->assertRunCommandViaApplicationContains('help ' . $commandName, $containsList); } function testCommandsAndHooks() @@ -92,18 +101,24 @@ class FullStackTests extends \PHPUnit_Framework_TestCase $formatter->addDefaultSimplifiers(); $hookManager = new HookManager(); $terminalWidthOption = new PrepareTerminalWidthOption(); + $terminalWidthOption->enableWrap(true); $terminalWidthOption->setApplication($this->application); + $testTerminal = new TestTerminal(0); + $terminalWidthOption->setTerminal($testTerminal); $commandProcessor = new CommandProcessor($hookManager); $commandProcessor->setFormatterManager($formatter); $commandProcessor->addPrepareFormatter($terminalWidthOption); // Create a new factory, and load all of the files - // discovered above. The command factory class is - // tested in isolation in testAnnotatedCommandFactory.php, - // but this is the only place where + // discovered above. $factory = new AnnotatedCommandFactory(); $factory->setCommandProcessor($commandProcessor); - // $factory->addListener(...); + // Add a listener to configure our command handler object + $factory->addListernerCallback(function($command) use($hookManager) { + if ($command instanceof CustomEventAwareInterface) { + $command->setHookManager($hookManager); + } + } ); $factory->setIncludeAllPublicMethods(false); $this->addDiscoveredCommands($factory, $commandFiles); @@ -112,6 +127,12 @@ class FullStackTests extends \PHPUnit_Framework_TestCase $this->assertTrue($this->application->has('example:table')); $this->assertFalse($this->application->has('without:annotations')); + // Run the use:event command that defines a custom event, my-event. + $this->assertRunCommandViaApplicationEquals('use:event', 'one,two'); + // Watch as we dynamically add a custom event to the hook manager to change the command results: + $hookManager->add(function () { return 'three'; }, HookManager::ON_EVENT, 'my-event'); + $this->assertRunCommandViaApplicationEquals('use:event', 'one,three,two'); + // Fetch a reference to the 'example:table' command and test its valid format types $exampleTableCommand = $this->application->find('example:table'); $returnType = $exampleTableCommand->getReturnType(); @@ -238,20 +259,21 @@ EOT; $this->assertRunCommandViaApplicationEquals('example:wrap', $expectedUnwrappedOutput); $expectedWrappedOutput = <<application->setWidthAndHeight(42, 24); + $testTerminal->setWidth(42); $this->assertRunCommandViaApplicationEquals('example:wrap', $expectedWrappedOutput); } @@ -333,7 +355,7 @@ EOT; $allRegisteredHooks = $hookManager->getAllHooks(); $registeredHookNames = array_keys($allRegisteredHooks); sort($registeredHookNames); - $this->assertEquals('*,example:table', implode(',', $registeredHookNames)); + $this->assertEquals('*,example:table,my-event', implode(',', $registeredHookNames)); $allHooksForExampleTable = $allRegisteredHooks['example:table']; $allHookPhasesForExampleTable = array_keys($allHooksForExampleTable); sort($allHookPhasesForExampleTable); @@ -443,7 +465,7 @@ EOT; function simplifyWhitespace($data) { - return trim(preg_replace('#[ \t]+$#m', '', $data)); + return trim(preg_replace('#\s+$#m', '', $data)); } function callProtected($object, $method, $args = []) diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testHelp.php b/lib/composer/vendor/consolidation/annotated-command/tests/testHelp.php new file mode 100644 index 00000000..e589861b --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testHelp.php @@ -0,0 +1,313 @@ +application = new ApplicationWithTerminalWidth('TestApplication', '0.0.0'); + $this->commandFactory = new AnnotatedCommandFactory(); + // $factory->addListener(...); + $alterOptionsEventManager = new AlterOptionsCommandEvent($this->application); + $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); + $eventDispatcher->addSubscriber($this->commandFactory->commandProcessor()->hookManager()); + $this->commandFactory->commandProcessor()->hookManager()->addCommandEvent($alterOptionsEventManager); + $this->application->setDispatcher($eventDispatcher); + $this->application->setAutoExit(false); + + $discovery = new CommandFileDiscovery(); + $discovery + ->setSearchPattern('*CommandFile.php') + ->setIncludeFilesAtBase(false) + ->setSearchLocations(['alpha']); + + chdir(__DIR__); + $commandFiles = $discovery->discover('.', '\Consolidation\TestUtils'); + + $formatter = new FormatterManager(); + $formatter->addDefaultFormatters(); + $formatter->addDefaultSimplifiers(); + $terminalWidthOption = new PrepareTerminalWidthOption(); + $terminalWidthOption->setApplication($this->application); + $this->commandFactory->commandProcessor()->setFormatterManager($formatter); + $this->commandFactory->commandProcessor()->addPrepareFormatter($terminalWidthOption); + + $this->commandFactory->setIncludeAllPublicMethods(false); + $this->addDiscoveredCommands($this->commandFactory, $commandFiles); + + $helpCommandfile = new HelpCommand($this->application); + $commandList = $this->commandFactory->createCommandsFromClass($helpCommandfile); + foreach ($commandList as $command) { + $this->application->add($command); + } + } + + public function addDiscoveredCommands($factory, $commandFiles) { + foreach ($commandFiles as $path => $commandClass) { + $this->assertFileExists($path); + if (!class_exists($commandClass)) { + include $path; + } + $commandInstance = new $commandClass(); + $commandList = $factory->createCommandsFromClass($commandInstance); + foreach ($commandList as $command) { + $this->application->add($command); + } + } + } + + function assertRunCommandViaApplicationEquals($cmd, $expectedOutput, $expectedStatusCode = 0) + { + $input = new StringInput($cmd); + $output = new BufferedOutput(); + + $statusCode = $this->application->run($input, $output); + $commandOutput = trim($output->fetch()); + + $expectedOutput = $this->simplifyWhitespace($expectedOutput); + $commandOutput = $this->simplifyWhitespace($commandOutput); + + $this->assertEquals($expectedOutput, $commandOutput); + $this->assertEquals($expectedStatusCode, $statusCode); + } + + function simplifyWhitespace($data) + { + return trim(preg_replace('#\s+$#m', '', $data)); + } + + function testHelp() + { + $expectedXML = << + + + example:table [--format [FORMAT]] [--fields [FIELDS]] [--field FIELD] [--] [<unused>] + + + + example:table --format=yml + Show the example table in yml format. + + + example:table --fields=first,third + Show only the first and third fields in the table. + + + example:table --fields=II,III + Note that either the field ID or the visible field label may be used. + + + Test command with formatters + + + An unused argument + + + + + + + + + + + + + + + + Test command with formatters + + extab + + + docs-tables + + +EOT; + + $this->assertRunCommandViaApplicationEquals('my-help --format=xml example:table', $expectedXML); + + $expectedJSON = <<]" + ], + "examples": [ + { + "usage": "example:table --format=yml", + "description": "Show the example table in yml format." + }, + { + "usage": "example:table --fields=first,third", + "description": "Show only the first and third fields in the table." + }, + { + "usage": "example:table --fields=II,III", + "description": "Note that either the field ID or the visible field label may be used." + } + ], + "description": "Test command with formatters", + "arguments": { + "unused": { + "name": "unused", + "is_required": "0", + "is_array": "0", + "description": "An unused argument" + } + }, + "options": { + "format": { + "name": "--format", + "shortcut": "", + "accept_value": "1", + "is_value_required": "0", + "is_multiple": "0", + "description": "Format the result data. Available formats: csv,json,list,php,print-r,sections,string,table,tsv,var_export,xml,yaml", + "defaults": [ + "table" + ] + }, + "fields": { + "name": "--fields", + "shortcut": "", + "accept_value": "1", + "is_value_required": "0", + "is_multiple": "0", + "description": "Available fields: I (first), II (second), III (third)" + }, + "field": { + "name": "--field", + "shortcut": "", + "accept_value": "1", + "is_value_required": "1", + "is_multiple": "0", + "description": "Select just one field, and force format to 'string'." + }, + "help": { + "name": "--help", + "shortcut": "-h", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Display this help message" + }, + "quiet": { + "name": "--quiet", + "shortcut": "-q", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Do not output any message" + }, + "verbose": { + "name": "--verbose", + "shortcut": "-v", + "shortcuts": "-v|-vv|-vvv", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug" + }, + "version": { + "name": "--version", + "shortcut": "-V", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Display this application version" + }, + "ansi": { + "name": "--ansi", + "shortcut": "", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Force ANSI output" + }, + "no-ansi": { + "name": "--no-ansi", + "shortcut": "", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Disable ANSI output" + }, + "no-interaction": { + "name": "--no-interaction", + "shortcut": "-n", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Do not ask any interactive question" + } + }, + "help": "Test command with formatters", + "aliases": [ + "extab" + ], + "topics": [ + "docs-tables" + ] +} +EOT; + $this->assertRunCommandViaApplicationEquals('my-help --format=json example:table', $expectedJSON); + } +} diff --git a/lib/composer/vendor/consolidation/config/.editorconfig b/lib/composer/vendor/consolidation/config/.editorconfig new file mode 100644 index 00000000..095771e6 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/.editorconfig @@ -0,0 +1,15 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[**.php] +indent_style = space +indent_size = 4 + diff --git a/lib/composer/vendor/consolidation/config/.gitignore b/lib/composer/vendor/consolidation/config/.gitignore new file mode 100644 index 00000000..c5082499 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +vendor +build diff --git a/lib/composer/vendor/consolidation/config/.travis.yml b/lib/composer/vendor/consolidation/config/.travis.yml new file mode 100644 index 00000000..ebcc34e5 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/.travis.yml @@ -0,0 +1,38 @@ +language: php + +branches: + # Only test the master branch and SemVer tags. + only: + - master + - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ + +matrix: + fast_finish: true + include: + - php: 7.2 + env: 'SCENARIO=symfony4 HIGHEST_LOWEST="update"' + - php: 7.1 + env: 'SCENARIO=symfony4' + - php: 7.0.11 + env: 'HIGHEST_LOWEST="update"' + - php: 7.0.11 + - php: 5.6 + - php: 5.5 + - php: 5.4 + env: 'SCENARIO=symfony2 HIGHEST_LOWEST="update --prefer-lowest' + +sudo: false + +cache: + directories: + - vendor + - $HOME/.composer/cache + +install: + - 'composer scenario "${SCENARIO}" "${HIGHEST_LOWEST-install}"' + +script: + - composer test + +after_success: + - travis_retry php vendor/bin/coveralls -v diff --git a/lib/composer/vendor/consolidation/config/CHANGELOG.md b/lib/composer/vendor/consolidation/config/CHANGELOG.md new file mode 100644 index 00000000..8029a39f --- /dev/null +++ b/lib/composer/vendor/consolidation/config/CHANGELOG.md @@ -0,0 +1,30 @@ +# Changelog + +### 1.0.6 10/17/2017 + +* Add a 'Config::combine()' method for importing without overwriting. +* Factor out ArrayUtil as a reusable utility class. + +### 1.0.4 10/16/2017 + +* BUGFIX: Go back to injecting boolean options only if their value is 'true'. + +### 1.0.3 10/04/2017 + +* Add an EnvConfig utility class. +* BUGFIX: Fix bug in envKey calculation: it was missing its prefix. +* BUGFIX: Export must always return something. +* BUGFIX: Pass reference array through to Expander class. + +### 1.0.2 09/16/2017 + +* BUGFIX: Allow global boolean options to have either `true` or `false` initial values. + +### 1.0.1 07/28/2017 + +* Inject default values into InputOption objects when 'help' command executed. + +### 1.0.0 06/28/2017 + +* Initial release + diff --git a/lib/composer/vendor/consolidation/config/CONTRIBUTING.md b/lib/composer/vendor/consolidation/config/CONTRIBUTING.md new file mode 100644 index 00000000..006062d5 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Consolidation + +Thank you for your interest in contributing to the Consolidation effort! Consolidation aims to provide reusable, loosely-coupled components useful for building command-line tools. Consolidation is built on top of Symfony Console, but aims to separate the tool from the implementation details of Symfony. + +Here are some of the guidelines you should follow to make the most of your efforts: + +## Code Style Guidelines + +Consolidation adheres to the [PSR-2 Coding Style Guide](http://www.php-fig.org/psr/psr-2/) for PHP code. + +## Pull Request Guidelines + +Every pull request is run through: + + - phpcs -n --standard=PSR2 src + - phpunit + - [Scrutinizer](https://scrutinizer-ci.com/g/consolidation/config/) + +It is easy to run the unit tests and code sniffer locally; just run: + + - composer cs + +To run the code beautifier, which will fix many of the problems reported by phpcs: + + - composer cbf + +These two commands (`composer cs` and `composer cbf`) are defined in the `scripts` section of [composer.json](composer.json). + +After submitting a pull request, please examine the Scrutinizer report. It is not required to fix all Scrutinizer issues; you may ignore recommendations that you disagree with. The spacing patches produced by Scrutinizer do not conform to PSR2 standards, and therefore should never be applied. DocBlock patches may be applied at your discression. Things that Scrutinizer identifies as a bug nearly always need to be addressed. + +Pull requests must pass phpcs and phpunit in order to be merged; ideally, new functionality will also include new unit tests. diff --git a/lib/composer/vendor/consolidation/config/LICENSE b/lib/composer/vendor/consolidation/config/LICENSE new file mode 100644 index 00000000..cecf81d7 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/LICENSE @@ -0,0 +1,8 @@ +Copyright (c) 2017 Consolidation Developers + + +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/lib/composer/vendor/consolidation/config/README.md b/lib/composer/vendor/consolidation/config/README.md new file mode 100644 index 00000000..7fdf11fc --- /dev/null +++ b/lib/composer/vendor/consolidation/config/README.md @@ -0,0 +1,210 @@ +# Consolidation\Config + +Manage configuration for a commandline tool. + +[![Travis CI](https://travis-ci.org/consolidation/config.svg?branch=master)](https://travis-ci.org/consolidation/config) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/config/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/config/?branch=master) +[![Coverage Status](https://coveralls.io/repos/github/consolidation/config/badge.svg?branch=master)](https://coveralls.io/github/consolidation/config?branch=master) +[![License](https://poser.pugx.org/consolidation/config/license)](https://packagist.org/packages/consolidation/config) + +This component is designed to provide the components needed to manage configuration options from different sources, including: + +- Commandline options +- Configuration files +- Alias files (special configuration files that identify a specific target site) +- Default values (provided by command) + +Symfony Console is used to provide the framework for the commandline tool, and the Symfony Configuration component is used to load and merge configuration files. This project provides the glue that binds the components together in an easy-to-use package. + +If your goal is to be able to quickly write configurable commandline tools, you might want to consider using [Robo as a Framework](https://robo.li/framework), as the work for setting up this component is already done in that project. Consolidation/Config may be used with any Symfony Console application, though. + +## Component Status + +In use in Robo (1.x), Terminus (1.x) and Drush (9.x). + +## Motivation + +Provide a simple Config class that can be injected where needed to provide configuration values in non-command classes, and make configuration settings a no-op for command classes by automatically initializing the Input object from configuration as needed. + +## Configuration File Usage + +Configuration files are simple hierarchical yaml files. + +### Providing Command Options + +Command options are defined by creating an entry for each command name under the `command:` section of the configuration file. The options for the command should be defined within an `options:` section. For example, to set a configuration value `red` for the option `--color` in the `example` command: +``` +command: + example: + options: + color: red +``` +If a command name contains a `:`, then each section of the command name defines another level of heirarchy in the command option configuration. For example, to set a configuration value `George` for the option `--name` of the command `my:foo`: +``` +command: + my: + foo: + options: + name: George +``` +Furthermore, every level of the command name heirarchy may contain options. For example, to define a configuration value for the option `--dir` for any command that begins with `my:`: +``` +command: + my: + options: + dir: '/base/path' + foo: + options: + name: George + bar: + options: + priority: high +``` + +### Providing Global Options + +If your Symfony Console application defines global options, like so (from a method in an extension of the Application class): +``` +$this->getDefinition() + ->addOption( + new InputOption('--simulate', null, InputOption::VALUE_NONE, 'Run in simulated mode (show what would have happened).') + ); +``` +Default values for global options can then be declared in the global options section: +``` +options: + simulate: false +``` +If this is done, then global option values set on the command line will be used to alter the value of the configuration item at runtime. For example, `$config->get('options.simulate')` will return `false` when the `--simulate` global option is not used, and will return `true` when it is. + +See the section "Set Up Command Option Configuration Injection", below, for instructions on how to enable this setup. + +### Configuration Value Substitution + +It is possible to define values in a configuration file that will be substituted in wherever used. For example: +``` +common: + path: '/shared/path' +command: + my: + options: + dir: '${common.path}' + foo: + options: + name: George +``` + +[grasmash/yaml-expander](https://github.com/grasmash/expander) is used to provide this capability. + +## API Usage + +The easiest way to utilize the capabilities of this project is to use [Robo as a framework](https://robo.li/framework) to create your commandline tools. Using Robo is optional, though, as this project will work with any Symfony Console application. + +### Load Configuration Files with Provided Loader + +Consolidation/config includes a built-in yaml loader / processor. To use it directly, use a YamlConfigLoader to load each of your configuration files, and a ConfigProcessor to merge them together. Then, export the result from the configuration processor, and import it into a Config object. +``` +use Consolidation\Config\Config; +use Consolidation\Config\YamlConfigLoader; +use Consolidation\Config\ConfigProcessor; + +$config = new Config(); +$loader = new YamlConfigLoader(); +$processor = new ConfigProcessor(); +$processor->extend($loader->load('defaults.yml')); +$processor->extend($loader->load('myconf.yml')); +$config->import($processor->export()); +``` + +### Set Up Command Option Configuration Injection + +The command option configuration feature described above in the section `Providing Command Options` is provided via a configuration injection class. All that you need to do to use this feature as attach this object to your Symfony Console application's event dispatcher: +``` +$application = new Symfony\Component\Console\Application($name, $version); +$configInjector = new \Consolidation\Config\Inject\ConfigForCommand($config); +$configInjector->setApplication($application); + +$eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); +$eventDispatcher->addSubscriber($configInjector); +$application->setDispatcher($eventDispatcher); +``` + + +### Get Configuration Values +If you have a configuration file that looks like this: +``` +a: + b: + c: foo +``` +Then you can fetch the value of the configuration option `c` via: +``` +$value = $config->get('a.b.c'); +``` +[dflydev/dot-access-data](https://github.com/dflydev/dot-access-data) is leveraged to provide this capability. + +### Configuration Overlays + +Optionally, you may use the ConfigOverlay class to combine multiple configuration objects implamenting ConfigInterface into a single, prioritized configuration object. It is not necessary to use a configuration overlay; if your only goal is to merge configuration from multiple files, you may follow the example above to extend a processor with multiple configuration files, and then import the result into a single configuration object. This will cause newer configuration items to overwrite any existing values stored under the same key. + +A configuration overlay can achieve the same end result without overwriting any config values. The advantage of doing this is that different configuration overlays could be used to create separate "views" on different collections of configuration. A configuration overlay is also useful if you wish to temporarily override some configuration values, and then put things back the way they were by removing the overlay. +``` +use Consolidation\Config\Config; +use Consolidation\Config\YamlConfigLoader; +use Consolidation\Config\ConfigProcessor; +use Consolidation\Config\Util\ConfigOverlay; + +$config1 = new Config(); +$config2 = new Config(); +$loader = new YamlConfigLoader(); +$processor = new ConfigProcessor(); +$processor->extend($loader->load('c1.yml')); +$config1->import($processor->export()); +$processor = new ConfigProcessor(); +$processor->extend($loader->load('c2.yml')); +$config2->import($processor->export()); + +$configOverlay = (new ConfigOverlay()) + ->addContext('one', $config1) + ->addContext('two', $config2); + +$value = $configOverlay->get('key'); + +$configOverlay->removeContext('two'); + +$value = $configOverlay->get('key'); +``` +The first call to `$configOverlay->get('key')`, above, will return the value from `key` in `$config2`, if it exists, or from `$config1` otherwise. The second call to the same function, after `$config2` is removed, will only consider configuration values stored in `$config1`. + +## External Examples + +### Load Configuration Files with Symfony/Config + +The [Symfony Config](http://symfony.com/doc/current/components/config.html) component provides the capability to locate configuration file, load them from either YAML or XML sources, and validate that they match a certain defined schema. Classes to find configuration files are also available. + +If these features are needed, the results from `Symfony\Component\Config\Definition\Processor::processConfiguration()` may be provided directly to the `Consolidation\Config\Config::import()` method. + +### Use Configuration to Call Setter Methods + +[Robo](https://robo.li) provides a facility for configuration files to [define default values for task setter methods](http://robo.li/getting-started/#configuration-for-task-settings). This is done via the `ConfigForSetters::apply()` method. +``` +$taskClass = static::configClassIdentifier($taskClass); +$configurationApplier = new \Consolidation\Config\Inject\ConfigForSetters($this->getConfig(), $taskClass, 'task.'); +$configurationApplier->apply($task, 'settings'); +``` +The `configClassIdentifier` method converts `\`-separated class and namespace names into `.`-separated identifiers; it is provided by ConfigAwareTrait: +``` +protected static function configClassIdentifier($classname) +{ + $configIdentifier = strtr($classname, '\\', '.'); + $configIdentifier = preg_replace('#^(.*\.Task\.|\.)#', '', $configIdentifier); + + return $configIdentifier; +} +``` +A similar pattern may be used in other applications that may wish to inject values into objects using their setter methods. + +## Comparison to Existing Solutions + +Drush has an existing procedural mechanism for loading configuration values from multiple files, and overlaying the results in priority order. Command-specific options from configuration files and site aliases may also be applied. + diff --git a/lib/composer/vendor/consolidation/config/composer.json b/lib/composer/vendor/consolidation/config/composer.json new file mode 100644 index 00000000..15ea3bcc --- /dev/null +++ b/lib/composer/vendor/consolidation/config/composer.json @@ -0,0 +1,68 @@ +{ + "name": "consolidation/config", + "description": "Provide configuration services for a commandline tool.", + "license": "MIT", + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "autoload":{ + "psr-4":{ + "Consolidation\\Config\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Consolidation\\TestUtils\\": "tests/src" + } + }, + "require": { + "php": ">=5.4.0", + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1" + }, + "require-dev": { + "phpunit/phpunit": "^4", + "greg-1-anderson/composer-test-scenarios": "^1", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.6" + } + }, + "scripts": { + "cs": "phpcs --standard=PSR2 -n src", + "cbf": "phpcbf --standard=PSR2 -n src", + "unit": "SHELL_INTERACTIVE=true phpunit --colors=always", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/consolidation/config/composer.lock b/lib/composer/vendor/consolidation/config/composer.lock new file mode 100644 index 00000000..92ec7499 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/composer.lock @@ -0,0 +1,1967 @@ +{ + "_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": "55aa0b628b3a57916df6d5a3fcb97d15", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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": "2015-06-14T21:17:01+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+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": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "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-10T14:09:06+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": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.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": "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": "2015-10-06T15:47:00+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": "1.4.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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-12-04T08:55:13+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.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": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzle/guzzle": "^2.8 || ^3.0", + "php": "^5.3.3 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "Satooshi\\": "src/Satooshi/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-12-06T23:17:56+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "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.4-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-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/e57211b88aa889fefac1cb36866db04100b0f21c", + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 Config Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:40:10+00:00" + }, + { + "name": "symfony/console", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/9f21adfb92a9315b73ae2ed43138988ee4913d4e", + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-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": "2017-12-14T19:40:10+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/543deab3ffff94402440b326fc94153bae2dfa7a", + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "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 Debug Component", + "homepage": "https://symfony.com", + "time": "2017-12-12T08:27:14+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b59aacf238fadda50d612c9de73b74751872a903" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b59aacf238fadda50d612c9de73b74751872a903", + "reference": "b59aacf238fadda50d612c9de73b74751872a903", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-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": "2017-11-05T15:25:56+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "25b135bea251829e3db6a77d773643408b575ed4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/25b135bea251829e3db6a77d773643408b575ed4", + "reference": "25b135bea251829e3db6a77d773643408b575ed4", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:40:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-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": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/52510fe1aefdc1c5d2076ac6030421d387e689d1", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:28:09+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "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": "3.4-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": "2017-12-11T20:38:23+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.0" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.6" + } +} diff --git a/lib/composer/vendor/consolidation/config/phpunit.xml.dist b/lib/composer/vendor/consolidation/config/phpunit.xml.dist new file mode 100644 index 00000000..90be6e2e --- /dev/null +++ b/lib/composer/vendor/consolidation/config/phpunit.xml.dist @@ -0,0 +1,19 @@ + + + + tests + + + + + + + + + src + + + diff --git a/lib/composer/vendor/consolidation/config/scenarios/install b/lib/composer/vendor/consolidation/config/scenarios/install new file mode 100755 index 00000000..e921ec0c --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/install @@ -0,0 +1,28 @@ +#!/bin/bash + +SCENARIO=$1 +ACTION=${2-install} + +dir=scenarios/${SCENARIO} +if [ -z "$SCENARIO" ] ; then + SCENARIO=default + dir=. +fi + + +if [ ! -d "$dir" ] ; then + echo "Requested scenario '${SCENARIO}' does not exist." + exit 1 +fi + +echo +echo "::" +echo ":: Switch to ${SCENARIO} scenario" +echo "::" +echo + +set -ex + +composer -n validate --working-dir=$dir --no-check-all --ansi +composer -n --working-dir=$dir ${ACTION} --prefer-dist --no-scripts +composer -n --working-dir=$dir info diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/.gitignore b/lib/composer/vendor/consolidation/config/scenarios/symfony2/.gitignore similarity index 77% rename from lib/composer/vendor/phpdocumentor/type-resolver/.gitignore rename to lib/composer/vendor/consolidation/config/scenarios/symfony2/.gitignore index 82cfc4e9..7579f743 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/.gitignore +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony2/.gitignore @@ -1,3 +1,2 @@ -.idea -composer.lock vendor +composer.lock diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony2/composer.json b/lib/composer/vendor/consolidation/config/scenarios/symfony2/composer.json new file mode 100644 index 00000000..b0a3a320 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony2/composer.json @@ -0,0 +1,70 @@ +{ + "name": "consolidation/config", + "description": "Provide configuration services for a commandline tool.", + "license": "MIT", + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "autoload":{ + "psr-4":{ + "Consolidation\\Config\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Consolidation\\TestUtils\\": "tests/src" + } + }, + "require": { + "php": ">=5.4.0", + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.8", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.4" + }, + "vendor-dir": "../../vendor" + }, + "scripts": { + "cs": "phpcs --standard=PSR2 -n src", + "cbf": "phpcbf --standard=PSR2 -n src", + "unit": "SHELL_INTERACTIVE=true phpunit --colors=always", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "minimum-stability": "stable" +} diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony2/src b/lib/composer/vendor/consolidation/config/scenarios/symfony2/src new file mode 120000 index 00000000..929cb3dc --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony2/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony2/tests b/lib/composer/vendor/consolidation/config/scenarios/symfony2/tests new file mode 120000 index 00000000..c2ebfe53 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony2/tests @@ -0,0 +1 @@ +../../tests \ No newline at end of file diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/.gitignore b/lib/composer/vendor/consolidation/config/scenarios/symfony4/.gitignore similarity index 53% rename from lib/composer/vendor/phpdocumentor/reflection-docblock/.gitignore rename to lib/composer/vendor/consolidation/config/scenarios/symfony4/.gitignore index 3ce5adbb..22d0d82f 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/.gitignore +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/.gitignore @@ -1,2 +1 @@ -.idea vendor diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.json b/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.json new file mode 100644 index 00000000..3352fc4f --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.json @@ -0,0 +1,70 @@ +{ + "name": "consolidation/config", + "description": "Provide configuration services for a commandline tool.", + "license": "MIT", + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "autoload":{ + "psr-4":{ + "Consolidation\\Config\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Consolidation\\TestUtils\\": "tests/src" + } + }, + "require": { + "php": ">=5.4.0", + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^4.0", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + + }, + "vendor-dir": "../../vendor" + }, + "scripts": { + "cs": "phpcs --standard=PSR2 -n src", + "cbf": "phpcbf --standard=PSR2 -n src", + "unit": "SHELL_INTERACTIVE=true phpunit --colors=always", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "minimum-stability": "stable" +} diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.lock b/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.lock new file mode 100644 index 00000000..e292c910 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.lock @@ -0,0 +1,1911 @@ +{ + "_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": "3b30556eb2e89df05233c8f1c3df833f", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" + } + ], + "packages-dev": [ + { + "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": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+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.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "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-27T17:38:31+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": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.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": "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": "2015-10-06T15:47:00+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": "1.4.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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-12-04T08:55:13+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.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": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzle/guzzle": "^2.8 || ^3.0", + "php": "^5.3.3 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "Satooshi\\": "src/Satooshi/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-12-06T23:17:56+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "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.4-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-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/0356e6d5298e9e72212c0bad65c2f1b49e42d622", + "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 Config Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/console", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/de8cf039eacdec59d83f7def67e3b8ff5ed46714", + "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714", + "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": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b59aacf238fadda50d612c9de73b74751872a903" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b59aacf238fadda50d612c9de73b74751872a903", + "reference": "b59aacf238fadda50d612c9de73b74751872a903", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-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": "2017-11-05T15:25:56+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c2868641d0c4885eee9c12a89c2b695eb1985cd", + "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-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": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-09T12:45:29+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "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": "3.4-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": "2017-12-11T20:38:23+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.0" + }, + "platform-dev": [] +} diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony4/src b/lib/composer/vendor/consolidation/config/scenarios/symfony4/src new file mode 120000 index 00000000..929cb3dc --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony4/tests b/lib/composer/vendor/consolidation/config/scenarios/symfony4/tests new file mode 120000 index 00000000..c2ebfe53 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/tests @@ -0,0 +1 @@ +../../tests \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/config/src/Config.php b/lib/composer/vendor/consolidation/config/src/Config.php new file mode 100644 index 00000000..25f714f2 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Config.php @@ -0,0 +1,157 @@ +config = new Data($data); + $this->setDefaults(new Data()); + } + + /** + * {@inheritdoc} + */ + public function has($key) + { + return ($this->config->has($key)); + } + + /** + * {@inheritdoc} + */ + public function get($key, $defaultFallback = null) + { + if ($this->has($key)) { + return $this->config->get($key); + } + return $this->getDefault($key, $defaultFallback); + } + + /** + * {@inheritdoc} + */ + public function set($key, $value) + { + $this->config->set($key, $value); + return $this; + } + + /** + * {@inheritdoc} + */ + public function import($data) + { + return $this->replace($data); + } + + /** + * {@inheritdoc} + */ + public function replace($data) + { + $this->config = new Data($data); + return $this; + } + + /** + * {@inheritdoc} + */ + public function combine($data) + { + if (!empty($data)) { + $this->config->import($data, true); + } + return $this; + } + + /** + * {@inheritdoc} + */ + public function export() + { + return $this->config->export(); + } + + /** + * {@inheritdoc} + */ + public function hasDefault($key) + { + return $this->getDefaults()->has($key); + } + + /** + * {@inheritdoc} + */ + public function getDefault($key, $defaultFallback = null) + { + return $this->hasDefault($key) ? $this->getDefaults()->get($key) : $defaultFallback; + } + + /** + * {@inheritdoc} + */ + public function setDefault($key, $value) + { + $this->getDefaults()->set($key, $value); + return $this; + } + + /** + * Return the class $defaults property and ensure it's a Data object + * TODO: remove Data object validation in 2.0 + * + * @return Data + */ + protected function getDefaults() + { + // Ensure $this->defaults is a Data object (not an array) + if (!$this->defaults instanceof Data) { + $this->setDefaults($this->defaults); + } + return $this->defaults; + } + + /** + * Sets the $defaults class parameter + * TODO: remove support for array in 2.0 as this would currently break backward compatibility + * + * @param Data|array $defaults + * + * @throws \Exception + */ + protected function setDefaults($defaults) + { + if (is_array($defaults)) { + $this->defaults = new Data($defaults); + } elseif ($defaults instanceof Data) { + $this->defaults = $defaults; + } else { + throw new \Exception("Unknown type provided for \$defaults"); + } + } +} diff --git a/lib/composer/vendor/consolidation/config/src/ConfigInterface.php b/lib/composer/vendor/consolidation/config/src/ConfigInterface.php new file mode 100644 index 00000000..5124ea1f --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/ConfigInterface.php @@ -0,0 +1,105 @@ + default-value + */ + public function getGlobalOptionDefaultValues(); +} diff --git a/lib/composer/vendor/consolidation/config/src/Inject/ConfigForCommand.php b/lib/composer/vendor/consolidation/config/src/Inject/ConfigForCommand.php new file mode 100644 index 00000000..ce2646e1 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Inject/ConfigForCommand.php @@ -0,0 +1,127 @@ +config = $config; + } + + public function setApplication(Application $application) + { + $this->application = $application; + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() + { + return [ConsoleEvents::COMMAND => 'injectConfiguration']; + } + + /** + * Before a Console command runs, inject configuration settings + * for this command into the default value of the options of + * this command. + * + * @param \Symfony\Component\Console\Event\ConsoleCommandEvent $event + */ + public function injectConfiguration(ConsoleCommandEvent $event) + { + $command = $event->getCommand(); + $this->injectConfigurationForGlobalOptions($event->getInput()); + $this->injectConfigurationForCommand($command, $event->getInput()); + + $targetOfHelpCommand = $this->getHelpCommandTarget($command, $event->getInput()); + if ($targetOfHelpCommand) { + $this->injectConfigurationForCommand($targetOfHelpCommand, $event->getInput()); + } + } + + protected function injectConfigurationForGlobalOptions($input) + { + if (!$this->application) { + return; + } + + $configGroup = new ConfigFallback($this->config, 'options'); + + $definition = $this->application->getDefinition(); + $options = $definition->getOptions(); + + return $this->injectConfigGroupIntoOptions($configGroup, $options, $input); + } + + protected function injectConfigurationForCommand($command, $input) + { + $commandName = $command->getName(); + $commandName = str_replace(':', '.', $commandName); + $configGroup = new ConfigFallback($this->config, $commandName, 'command.', '.options.'); + + $definition = $command->getDefinition(); + $options = $definition->getOptions(); + + return $this->injectConfigGroupIntoOptions($configGroup, $options, $input); + } + + protected function injectConfigGroupIntoOptions($configGroup, $options, $input) + { + foreach ($options as $option => $inputOption) { + $key = str_replace('.', '-', $option); + $value = $configGroup->get($key); + if ($value !== null) { + if (is_bool($value) && ($value == true)) { + $input->setOption($key, $value); + } elseif ($inputOption->acceptValue()) { + $inputOption->setDefault($value); + } + } + } + } + + protected function getHelpCommandTarget($command, $input) + { + if (($command->getName() != 'help') || (!isset($this->application))) { + return false; + } + + $this->fixInputForSymfony2($command, $input); + + // Symfony Console helpfully swaps 'command_name' and 'command' + // depending on whether the user entered `help foo` or `--help foo`. + // One of these is always `help`, and the other is the command we + // are actually interested in. + $nameOfCommandToDescribe = $input->getArgument('command_name'); + if ($nameOfCommandToDescribe == 'help') { + $nameOfCommandToDescribe = $input->getArgument('command'); + } + return $this->application->find($nameOfCommandToDescribe); + } + + protected function fixInputForSymfony2($command, $input) + { + // Symfony 3.x prepares $input for us; Symfony 2.x, on the other + // hand, passes it in prior to binding with the command definition, + // so we have to go to a little extra work. It may be inadvisable + // to do these steps for commands other than 'help'. + if (!$input->hasArgument('command_name')) { + $command->ignoreValidationErrors(); + $command->mergeApplicationDefinition(); + $input->bind($command->getDefinition()); + } + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Inject/ConfigForSetters.php b/lib/composer/vendor/consolidation/config/src/Inject/ConfigForSetters.php new file mode 100644 index 00000000..5ec87042 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Inject/ConfigForSetters.php @@ -0,0 +1,47 @@ +config = new ConfigMerge($config, $group, $prefix, $postfix); + } + + public function apply($object, $configurationKey) + { + $settings = $this->config->get($configurationKey); + foreach ($settings as $setterMethod => $args) { + $fn = [$object, $setterMethod]; + if (is_callable($fn)) { + $result = call_user_func_array($fn, (array)$args); + + // We require that $fn must only be used with setter methods. + // Setter methods are required to always return $this so that + // they may be chained. We will therefore throw an exception + // for any setter that returns something else. + if ($result != $object) { + $methodDescription = get_class($object) . "::$setterMethod"; + $propertyDescription = $this->config->describe($configurationKey); + throw new \Exception("$methodDescription did not return '\$this' when processing $propertyDescription."); + } + } + } + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoader.php b/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoader.php new file mode 100644 index 00000000..ecc6f64f --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoader.php @@ -0,0 +1,35 @@ +source; + } + + protected function setSourceName($source) + { + $this->source = $source; + return $this; + } + + public function export() + { + return $this->config; + } + + public function keys() + { + return array_keys($this->config); + } + + abstract public function load($path); +} diff --git a/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoaderInterface.php b/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoaderInterface.php new file mode 100644 index 00000000..9b155c1b --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoaderInterface.php @@ -0,0 +1,29 @@ +expander = $expander ?: new Expander(); + } + + /** + * Extend the configuration to be processed with the + * configuration provided by the specified loader. + * + * @param ConfigLoaderInterface $loader + */ + public function extend(ConfigLoaderInterface $loader) + { + return $this->addFromSource($loader->export(), $loader->getSourceName()); + } + + /** + * Extend the configuration to be processed with + * the provided nested array. + * + * @param array $data + */ + public function add($data) + { + $this->unprocessedConfig[] = $data; + return $this; + } + + /** + * Extend the configuration to be processed with + * the provided nested array. Also record the name + * of the data source, if applicable. + * + * @param array $data + * @param string $source + */ + protected function addFromSource($data, $source = '') + { + if (empty($source)) { + return $this->add($data); + } + $this->unprocessedConfig[$source] = $data; + return $this; + } + + /** + * Process all of the configuration that has been collected, + * and return a nested array. + * + * @return array + */ + public function export($referenceArray = []) + { + if (!empty($this->unprocessedConfig)) { + $this->processedConfig = $this->process( + $this->processedConfig, + $this->fetchUnprocessed(), + $referenceArray + ); + } + return $this->processedConfig; + } + + /** + * To aid in debugging: return the source of each configuration item. + * n.b. Must call this function *before* export and save the result + * if persistence is desired. + */ + public function sources() + { + $sources = []; + foreach ($this->unprocessedConfig as $sourceName => $config) { + if (!empty($sourceName)) { + $configSources = ArrayUtil::fillRecursive($config, $sourceName); + $sources = ArrayUtil::mergeRecursiveDistinct($sources, $configSources); + } + } + return $sources; + } + + /** + * Get the configuration to be processed, and clear out the + * 'unprocessed' list. + * + * @return array + */ + protected function fetchUnprocessed() + { + $toBeProcessed = $this->unprocessedConfig; + $this->unprocessedConfig = []; + return $toBeProcessed; + } + + /** + * Use a map-reduce to evaluate the items to be processed, + * and merge them into the processed array. + * + * @param array $processed + * @param array $toBeProcessed + * @return array + */ + protected function process(array $processed, array $toBeProcessed, $referenceArray = []) + { + $toBeReduced = array_map([$this, 'preprocess'], $toBeProcessed); + $reduced = array_reduce($toBeReduced, [$this, 'reduceOne'], $processed); + return $this->evaluate($reduced, $referenceArray); + } + + /** + * Process a single configuration file from the 'to be processed' + * list. By default this is a no-op. Override this method to + * provide any desired configuration preprocessing, e.g. dot-notation + * expansion of the configuration keys, etc. + * + * @param array $config + * @return array + */ + protected function preprocess(array $config) + { + return $config; + } + + /** + * Evaluate one item in the 'to be evaluated' list, and then + * merge it into the processed configuration (the 'carry'). + * + * @param array $processed + * @param array $config + * @return array + */ + protected function reduceOne(array $processed, array $config) + { + return ArrayUtil::mergeRecursiveDistinct($processed, $config); + } + + /** + * Evaluate one configuration item. + * + * @param array $processed + * @param array $config + * @return array + */ + protected function evaluate(array $config, $referenceArray = []) + { + return $this->expander->expandArrayProperties( + $config, + $referenceArray + ); + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Loader/YamlConfigLoader.php b/lib/composer/vendor/consolidation/config/src/Loader/YamlConfigLoader.php new file mode 100644 index 00000000..45705662 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Loader/YamlConfigLoader.php @@ -0,0 +1,26 @@ +setSourceName($path); + + // We silently skip any nonexistent config files, so that + // clients may simply `load` all of their candidates. + if (!file_exists($path)) { + $this->config = []; + return $this; + } + $this->config = (array) Yaml::parse(file_get_contents($path)); + return $this; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ArrayUtil.php b/lib/composer/vendor/consolidation/config/src/Util/ArrayUtil.php new file mode 100644 index 00000000..a23f854e --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ArrayUtil.php @@ -0,0 +1,75 @@ + &$value) { + $merged[$key] = self::mergeRecursiveValue($merged, $key, $value); + } + return $merged; + } + + /** + * Process the value in an mergeRecursiveDistinct - make a recursive + * call if needed. + */ + protected static function mergeRecursiveValue(&$merged, $key, $value) + { + if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { + return self::mergeRecursiveDistinct($merged[$key], $value); + } + return $value; + } + + /** + * Fills all of the leaf-node values of a nested array with the + * provided replacement value. + */ + public static function fillRecursive(array $data, $fill) + { + $result = []; + foreach ($data as $key => $value) { + $result[$key] = $fill; + if (self::isAssociative($value)) { + $result[$key] = self::fillRecursive($value, $fill); + } + } + return $result; + } + + /** + * Return true if the provided parameter is an array, and at least + * one key is non-numeric. + */ + public static function isAssociative($testArray) + { + if (!is_array($testArray)) { + return false; + } + foreach (array_keys($testArray) as $key) { + if (!is_numeric($key)) { + return true; + } + } + return false; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ConfigFallback.php b/lib/composer/vendor/consolidation/config/src/Util/ConfigFallback.php new file mode 100644 index 00000000..9f9972f6 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ConfigFallback.php @@ -0,0 +1,51 @@ +getWithFallback($key, $this->group, $this->prefix, $this->postfix); + } + + /** + * Fetch an option value from a given key, or, if that specific key does + * not contain a value, then consult various fallback options until a + * value is found. + * + */ + protected function getWithFallback($key, $group, $prefix = '', $postfix = '.') + { + $configKey = "{$prefix}{$group}${postfix}{$key}"; + if ($this->config->has($configKey)) { + return $this->config->get($configKey); + } + if ($this->config->hasDefault($configKey)) { + return $this->config->getDefault($configKey); + } + $moreGeneralGroupname = $this->moreGeneralGroupName($group); + if ($moreGeneralGroupname) { + return $this->getWithFallback($key, $moreGeneralGroupname, $prefix, $postfix); + } + return null; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ConfigGroup.php b/lib/composer/vendor/consolidation/config/src/Util/ConfigGroup.php new file mode 100644 index 00000000..24b29dd8 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ConfigGroup.php @@ -0,0 +1,61 @@ +config = $config; + $this->group = $group; + $this->prefix = $prefix; + $this->postfix = $postfix; + } + + /** + * Return a description of the configuration group (with prefix and postfix). + */ + public function describe($property) + { + return $this->prefix . $this->group . $this->postfix . $property; + } + + /** + * Get the requested configuration key from the most specific configuration + * group that contains it. + */ + abstract public function get($key); + + /** + * Given a group name, such as "foo.bar.baz", return the next configuration + * group in the fallback hierarchy, e.g. "foo.bar". + */ + protected function moreGeneralGroupName($group) + { + $result = preg_replace('#\.[^.]*$#', '', $group); + if ($result != $group) { + return $result; + } + return false; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ConfigMerge.php b/lib/composer/vendor/consolidation/config/src/Util/ConfigMerge.php new file mode 100644 index 00000000..65fccf72 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ConfigMerge.php @@ -0,0 +1,34 @@ +getWithMerge($key, $this->group, $this->prefix, $this->postfix); + } + + /** + * Merge available configuration from each configuration group. + */ + public function getWithMerge($key, $group, $prefix = '', $postfix = '.') + { + $configKey = "{$prefix}{$group}${postfix}{$key}"; + $result = $this->config->get($configKey, []); + if (!is_array($result)) { + throw new \UnexpectedValueException($configKey . ' must be a list of settings to apply.'); + } + $moreGeneralGroupname = $this->moreGeneralGroupName($group); + if ($moreGeneralGroupname) { + $result += $this->getWithMerge($key, $moreGeneralGroupname, $prefix, $postfix); + } + return $result; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ConfigOverlay.php b/lib/composer/vendor/consolidation/config/src/Util/ConfigOverlay.php new file mode 100644 index 00000000..d1f12697 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ConfigOverlay.php @@ -0,0 +1,203 @@ +contexts[self::DEFAULT_CONTEXT] = new Config(); + $this->contexts[self::PROCESS_CONTEXT] = new Config(); + } + + /** + * Add a named configuration object to the configuration overlay. + * Configuration objects added LAST have HIGHEST priority, with the + * exception of the fact that the process context always has the + * highest priority. + * + * If a context has already been added, its priority will not change. + */ + public function addContext($name, ConfigInterface $config) + { + $process = $this->contexts[self::PROCESS_CONTEXT]; + unset($this->contexts[self::PROCESS_CONTEXT]); + $this->contexts[$name] = $config; + $this->contexts[self::PROCESS_CONTEXT] = $process; + + return $this; + } + + /** + * Add a placeholder context that will be prioritized higher than + * existing contexts. This is done to ensure that contexts added + * later will maintain a higher priority if the placeholder context + * is later relaced with a different configuration set via addContext(). + * + * @param string $name + * @return $this + */ + public function addPlaceholder($name) + { + return $this->addContext($name, new Config()); + } + + /** + * Increase the priority of the named context such that it is higher + * in priority than any existing context except for the 'process' + * context. + * + * @param string $name + * @return $this + */ + public function increasePriority($name) + { + $config = $this->getContext($name); + unset($this->contexts[$name]); + return $this->addContext($name, $config); + } + + public function hasContext($name) + { + return isset($this->contexts[$name]); + } + + public function getContext($name) + { + if ($this->hasContext($name)) { + return $this->contexts[$name]; + } + return new Config(); + } + + public function removeContext($name) + { + unset($this->contexts[$name]); + } + + /** + * Determine if a non-default config value exists. + */ + public function findContext($key) + { + foreach (array_reverse($this->contexts) as $name => $config) { + if ($config->has($key)) { + return $config; + } + } + return false; + } + + /** + * @inheritdoc + */ + public function has($key) + { + return $this->findContext($key) != false; + } + + /** + * @inheritdoc + */ + public function get($key, $default = null) + { + $context = $this->findContext($key); + if ($context) { + return $context->get($key, $default); + } + return $default; + } + + /** + * @inheritdoc + */ + public function set($key, $value) + { + $this->contexts[self::PROCESS_CONTEXT]->set($key, $value); + return $this; + } + + /** + * @inheritdoc + */ + public function import($data) + { + $this->unsupported(__FUNCTION__); + } + + /** + * @inheritdoc + */ + public function replace($data) + { + $this->unsupported(__FUNCTION__); + } + + /** + * @inheritdoc + */ + public function combine($data) + { + $this->unsupported(__FUNCTION__); + } + + /** + * @inheritdoc + */ + protected function unsupported($fn) + { + throw new \Exception("The method '$fn' is not supported for the ConfigOverlay class."); + } + + /** + * @inheritdoc + */ + public function export() + { + $export = []; + foreach ($this->contexts as $name => $config) { + $export = array_merge_recursive($export, $config->export()); + } + return $export; + } + + /** + * @inheritdoc + */ + public function hasDefault($key) + { + return $this->contexts[self::DEFAULT_CONTEXT]->has($key); + } + + /** + * @inheritdoc + */ + public function getDefault($key, $default = null) + { + return $this->contexts[self::DEFAULT_CONTEXT]->get($key, $default); + } + + /** + * @inheritdoc + */ + public function setDefault($key, $value) + { + $this->contexts[self::DEFAULT_CONTEXT]->set($key, $value); + return $this; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/EnvConfig.php b/lib/composer/vendor/consolidation/config/src/Util/EnvConfig.php new file mode 100644 index 00000000..05f8d2a8 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/EnvConfig.php @@ -0,0 +1,96 @@ +prefix = strtoupper(rtrim($prefix, '_')) . '_'; + } + + /** + * @inheritdoc + */ + public function has($key) + { + return $this->get($key) !== null; + } + + /** + * @inheritdoc + */ + public function get($key, $defaultFallback = null) + { + $envKey = $this->prefix . strtoupper(strtr($key, '.-', '__')); + $envKey = str_replace($this->prefix . $this->prefix, $this->prefix, $envKey); + return getenv($envKey) ?: $defaultFallback; + } + + /** + * @inheritdoc + */ + public function set($key, $value) + { + throw new \Exception('Cannot call "set" on environmental configuration.'); + } + + /** + * @inheritdoc + */ + public function import($data) + { + // no-op + } + + /** + * @inheritdoc + */ + public function export() + { + return []; + } + + /** + * @inheritdoc + */ + public function hasDefault($key) + { + return false; + } + + /** + * @inheritdoc + */ + public function getDefault($key, $defaultFallback = null) + { + return $defaultFallback; + } + + /** + * @inheritdoc + */ + public function setDefault($key, $value) + { + throw new \Exception('Cannot call "setDefault" on environmental configuration.'); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigForCommandTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigForCommandTest.php new file mode 100644 index 00000000..41da3076 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigForCommandTest.php @@ -0,0 +1,130 @@ + [ + 'global' => 'from-config', + ], + // Define some configuration settings for the options for + // the commands my:foo and my:bar. + 'command' => [ + 'my' => [ + // commands.my.options.* apply to all my:* commands. + 'options' => [ + 'dir' => '/etc/common', + 'priority' => 'normal', + ], + 'foo' => [ + // commands.my.foo.options.* apply only to the my:foo command. + 'options' => [ + 'name' => 'baz', + ], + ], + ], + ], + ]; + + $this->config = new Config($data); + } + + public function testInjection() + { + $command = new MyFooCommand(); + $input = new StringInput('my:foo'); + + list($status, $output) = $this->runCommandViaApplication($command, $input); + + $expectedOutput = <<< EOT +Enter my:foo +dir: /etc/common +name: baz +other: fish +EOT; + + $this->assertEquals(0, $status); + $this->assertEquals($expectedOutput, $output); + } + + public function testInjectionWithOverride() + { + $command = new MyFooCommand(); + $input = new StringInput('my:foo --name=Fred'); + + list($status, $output) = $this->runCommandViaApplication($command, $input); + + $expectedOutput = <<< EOT +Enter my:foo +dir: /etc/common +name: Fred +other: fish +EOT; + + $this->assertEquals(0, $status); + $this->assertEquals($expectedOutput, $output); + } + + public function testHelpDefaultInjection() + { + $command = new MyFooCommand(); + $input = new StringInput('help my:foo'); + + list($status, $output) = $this->runCommandViaApplication($command, $input); + + $expectedOutput = <<< EOT +What is the name of the thing we are naming [default: "baz"] +EOT; + + $this->assertEquals(0, $status); + $this->assertContains($expectedOutput, $output); + + $expectedOutput = <<< EOT +A certain global option. [default: "from-config"] +EOT; + + $this->assertContains($expectedOutput, $output); + } + + protected function runCommandViaApplication($command, $input) + { + $application = new Application('TestApplication', '0.0.0'); + $application->getDefinition() + ->addOption( + new InputOption('--global', null, InputOption::VALUE_REQUIRED, 'A certain global option.', 'hardcoded') + ); + + $output = new BufferedOutput(); + + $configInjector = new ConfigForCommand($this->config); + $configInjector->setApplication($application); + + $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); + $eventDispatcher->addSubscriber($configInjector); + $application->setDispatcher($eventDispatcher); + + $application->setAutoExit(false); + $application->add($command); + + $statusCode = $application->run($input, $output); + $commandOutput = trim($output->fetch()); + + return [$statusCode, $commandOutput]; + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigForSettersTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigForSettersTest.php new file mode 100644 index 00000000..422b0a00 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigForSettersTest.php @@ -0,0 +1,87 @@ + [ + 'Operations' => [ + // task.Operations.settings apply to all tasks in + // any *.Tass.Operations namespace. + 'settings' => [ + 'dir' => '/base/dir', + ], + 'Frobulate' => [ + // task.Operations.Frobulate.settings applies only + // the Frobulate task. + 'settings' => [ + 'dir' => '/override/dir', + ], + ], + ], + ], + ]; + $config = new Config($data); + + $applicator = new ConfigForSetters($config, 'Operations.Frobulate', 'task.'); + + $testTarget = new ApplyConfigTestTarget(); + + $applicator->apply($testTarget, 'settings'); + + $this->assertEquals('/override/dir', $testTarget->getDir()); + $this->assertEquals(null, $testTarget->getBad()); + } + + public function testApplyBadConfig() + { + $data = [ + // Define some configuration settings for the configuration + // of some task \My\Tasks\Operations\Frobulate. + 'task' => [ + 'Operations' => [ + // task.Operations.settings apply to all tasks in + // any *.Tass.Operations namespace. + 'settings' => [ + 'dir' => '/base/dir', + ], + 'Frobulate' => [ + // task.Operations.Frobulate.settings applies only + // the Frobulate task. + 'settings' => [ + 'bad' => 'fire truck', + ], + ], + ], + ], + ]; + $config = new Config($data); + + $applicator = new ConfigForSetters($config, 'Operations.Frobulate', 'task.'); + + $testTarget = new ApplyConfigTestTarget(); + + $exceptionMessage = ''; + try + { + $applicator->apply($testTarget, 'settings'); + } + catch (\Exception $e) + { + $exceptionMessage = $e->getMessage(); + } + // We would prefer it if bad methods were never called; unfortunately, + // declaring the return type of a method cannot be done in a reliable + // way (via reflection) until php 7, so we allow these methods to be + // called for now. + $this->assertEquals('fire truck', $testTarget->getBad()); + $this->assertEquals('Consolidation\\TestUtils\\ApplyConfigTestTarget::bad did not return \'$this\' when processing task.Operations.Frobulate.settings.', $exceptionMessage); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigGroupTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigGroupTest.php new file mode 100644 index 00000000..21e470e5 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigGroupTest.php @@ -0,0 +1,91 @@ + [ + 'my' => [ + // commands.my.options.* apply to all my:* commands. + 'options' => [ + 'path' => '/etc/common', + 'priority' => 'normal', + ], + 'foo' => [ + // commands.my.foo.options.* apply only to the my:foo command. + 'options' => [ + 'name' => 'baz', + ], + ], + 'bar' => [ + // Similarly, commands.my.bar.options is for the my:bar command. + 'options' => [ + 'priority' => 'high', + ], + ], + ], + ], + // Define some configuration settings for the configuration + // of some task \My\Tasks\Operations\Frobulate. + 'task' => [ + 'Operations' => [ + // task.Operations.settings apply to all tasks in + // any *.Tass.Operations namespace. + 'settings' => [ + 'dir' => '/base/dir', + ], + 'Frobulate' => [ + // task.Operations.Frobulate.settings applies only + // the Frobulate task. + 'settings' => [ + 'object' => 'fire truck', + ], + ], + ], + ], + ]; + + $this->config = new Config($data); + } + + public function testDotNotation() + { + // Test the test + $this->assertEquals('baz', $this->config->get('command.my.foo.options.name')); + } + + public function testFallback() + { + $fooFallback = new ConfigFallback($this->config, 'my.foo', 'command.', '.options.'); + $barFallback = new ConfigFallback($this->config, 'my.bar', 'command.', '.options.'); + + $this->assertEquals(null, $barFallback->get('name')); + $this->assertEquals('baz', $fooFallback->get('name')); + $this->assertEquals('high', $barFallback->get('priority')); + + $this->assertEquals('normal', $fooFallback->get('priority')); + $this->assertEquals('/etc/common', $barFallback->get('path')); + $this->assertEquals('/etc/common', $fooFallback->get('path')); + } + + public function testMerge() + { + $frobulateMerge = new ConfigMerge($this->config, 'Operations.Frobulate', 'task.'); + + $settings = $frobulateMerge->get('settings'); + $this->assertEquals('fire truck', $settings['object']); + $this->assertEquals('/base/dir', $settings['dir']); + $keys = array_keys($settings); + sort($keys); + $this->assertEquals('dir,object', implode(',', $keys)); + } +} + diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigLoaderTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigLoaderTest.php new file mode 100644 index 00000000..6dedb1f3 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigLoaderTest.php @@ -0,0 +1,29 @@ +assertTrue(file_exists($path)); + + $loader->load($path); + + $configFile = basename($loader->getSourceName()); + $this->assertEquals('config-1.yml', $configFile); + + // Make sure that the data we loaded contained the expected keys + $keys = $loader->keys(); + sort($keys); + $keysString = implode(',', $keys); + $this->assertEquals('c,m', $keysString); + + $configData = $loader->export(); + $this->assertEquals('foo', $configData['c']); + $this->assertEquals('1', $configData['m'][0]); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigOverlayTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigOverlayTest.php new file mode 100644 index 00000000..f7faf748 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigOverlayTest.php @@ -0,0 +1,168 @@ +import([ + 'hidden-by-a' => 'alias hidden-by-a', + 'hidden-by-process' => 'alias hidden-by-process', + 'options' =>[ + 'a-a' => 'alias-a', + ], + 'command' => [ + 'foo' => [ + 'bar' => [ + 'command' => [ + 'options' => [ + 'a-b' => 'alias-b', + ], + ], + ], + ], + ], + ]); + + $configFileContext = new Config(); + $configFileContext->import([ + 'hidden-by-cf' => 'config-file hidden-by-cf', + 'hidden-by-a' => 'config-file hidden-by-a', + 'hidden-by-process' => 'config-file hidden-by-process', + 'options' =>[ + 'cf-a' => 'config-file-a', + ], + 'command' => [ + 'foo' => [ + 'bar' => [ + 'command' => [ + 'options' => [ + 'cf-b' => 'config-file-b', + ], + ], + ], + ], + ], + ]); + + $this->overlay = new ConfigOverlay(); + $this->overlay->set('hidden-by-process', 'process-h'); + $this->overlay->addContext('cf', $configFileContext); + $this->overlay->addContext('a', $aliasContext); + $this->overlay->setDefault('df-a', 'default'); + $this->overlay->setDefault('hidden-by-a', 'default hidden-by-a'); + $this->overlay->setDefault('hidden-by-cf', 'default hidden-by-cf'); + $this->overlay->setDefault('hidden-by-process', 'default hidden-by-process'); + } + + public function testGetPriority() + { + $this->assertEquals('process-h', $this->overlay->get('hidden-by-process')); + $this->assertEquals('config-file hidden-by-cf', $this->overlay->get('hidden-by-cf')); + $this->assertEquals('alias hidden-by-a', $this->overlay->get('hidden-by-a')); + } + + public function testDefault() + { + $this->assertEquals('alias-a', $this->overlay->get('options.a-a')); + $this->assertEquals('alias-a', $this->overlay->get('options.a-a', 'ignored')); + $this->assertEquals('default', $this->overlay->getDefault('df-a', 'ignored')); + $this->assertEquals('nsv', $this->overlay->getDefault('a-a', 'nsv')); + + $this->overlay->setDefault('df-a', 'new value'); + $this->assertEquals('new value', $this->overlay->getDefault('df-a', 'ignored')); + } + + public function testExport() + { + $data = $this->overlay->export(); + + $this->assertEquals('config-file-a', $data['options']['cf-a']); + $this->assertEquals('alias-a', $data['options']['a-a']); + } + + /** + * @expectedException Exception + */ + public function testImport() + { + $data = $this->overlay->import(['a' => 'value']); + } + + public function testMaintainPriority() + { + // Get and re-add the 'cf' context. Its priority should not change. + $configFileContext = $this->overlay->getContext('cf'); + $this->overlay->addContext('cf', $configFileContext); + + // These asserts are the same as in testGetPriority + $this->assertEquals('process-h', $this->overlay->get('hidden-by-process')); + $this->assertEquals('config-file hidden-by-cf', $this->overlay->get('hidden-by-cf')); + $this->assertEquals('alias hidden-by-a', $this->overlay->get('hidden-by-a')); + } + + public function testChangePriority() + { + // Increase the priority of the 'cf' context. Now, it should have a higher + // priority than the 'alias' context, but should still have a lower + // priority than the 'process' context. + $this->overlay->increasePriority('cf'); + + // These asserts are the same as in testGetPriority + $this->assertEquals('process-h', $this->overlay->get('hidden-by-process')); + $this->assertEquals('config-file hidden-by-cf', $this->overlay->get('hidden-by-cf')); + + // This one has changed: the config-file value is now found instead + // of the alias value. + $this->assertEquals('config-file hidden-by-a', $this->overlay->get('hidden-by-a')); + } + + public function testPlaceholder() + { + $this->overlay->addPlaceholder('lower'); + + $higherContext = new Config(); + $higherContext->import(['priority-test' => 'higher']); + + $lowerContext = new Config(); + $lowerContext->import(['priority-test' => 'lower']); + + // Usually 'lower' would have the highest priority, since it is + // added last. However, our earlier call to 'addPlaceholder' reserves + // a spot for it, so the 'higher' context will end up with a higher + // priority. + $this->overlay->addContext('higher', $higherContext); + $this->overlay->addContext('lower', $lowerContext); + $this->assertEquals('higher', $this->overlay->get('priority-test', 'neither')); + + // Test to see that we can change the value of the 'higher' context, + // and the change will be reflected in the overlay. + $higherContext->set('priority-test', 'changed'); + $this->assertEquals('changed', $this->overlay->get('priority-test', 'neither')); + + // Test to see that the 'process' context still has the highest priority. + $this->overlay->set('priority-test', 'process'); + $higherContext->set('priority-test', 'ignored'); + $this->assertEquals('process', $this->overlay->get('priority-test', 'neither')); + } + + public function testDoesNotHave() + { + $context = $this->overlay->getContext('no-such-context'); + $data = $context->export(); + $this->assertEquals('[]', json_encode($data)); + + $this->assertTrue(!$this->overlay->has('no-such-key')); + $this->assertTrue(!$this->overlay->hasDefault('no-such-default')); + + $this->assertEquals('no-such-value', $this->overlay->get('no-such-key', 'no-such-value')); + + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigProcessorTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigProcessorTest.php new file mode 100644 index 00000000..ac645a28 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigProcessorTest.php @@ -0,0 +1,152 @@ + 'foo', + 'm' => [1], + ]; + $config2 = [ + 'b' => '${c}bar', + 'm' => [2], + ]; + $config3 = [ + 'a' => '${b}baz', + 'm' => [3], + ]; + + $processor = new ConfigProcessor(); + $processor->add($config1); + $processor->add($config2); + $processor->add($config3); + + $data = $processor->export(); + $this->assertEquals('foo', $data['c']); + $this->assertEquals('foobar', $data['b']); + $this->assertEquals('foobarbaz', $data['a']); + } + + public function processorForConfigMergeTest($provideSourceNames) + { + $config1 = [ + 'm' => [ + 'x' => 'x-1', + 'y' => [ + 'r' => 'r-1', + 's' => 's-1', + 't' => 't-1', + ], + 'z' => 'z-1', + ], + ]; + $config2 = [ + 'm' => [ + 'w' => 'w-2', + 'y' => [ + 'q' => 'q-2', + 's' => 's-2', + ], + 'z' => 'z-2', + ], + ]; + $config3 = [ + 'm' => [ + 'v' => 'v-3', + 'y' => [ + 't' => 't-3', + 'u' => 'u-3', + ], + 'z' => 'z-3', + ], + ]; + + $processor = new ConfigProcessor(); + $testLoader = new TestLoader(); + + $testLoader->set($config1); + $testLoader->setSourceName($provideSourceNames ? 'c-1' : ''); + $processor->extend($testLoader); + + $testLoader->set($config2); + $testLoader->setSourceName($provideSourceNames ? 'c-2' : ''); + $processor->extend($testLoader); + + $testLoader->set($config3); + $testLoader->setSourceName($provideSourceNames ? 'c-3' : ''); + $processor->extend($testLoader); + + return $processor; + } + + public function testConfigProcessorMergeAssociative() + { + $processor = $this->processorForConfigMergeTest(false); + $data = $processor->export(); + $this->assertEquals('{"m":{"x":"x-1","y":{"r":"r-1","s":"s-2","t":"t-3","q":"q-2","u":"u-3"},"z":"z-3","w":"w-2","v":"v-3"}}', json_encode($data)); + } + + public function testConfigProcessorMergeAssociativeWithSourceNames() + { + $processor = $this->processorForConfigMergeTest(true); + $sources = $processor->sources(); + $data = $processor->export(); + $this->assertEquals('{"m":{"x":"x-1","y":{"r":"r-1","s":"s-2","t":"t-3","q":"q-2","u":"u-3"},"z":"z-3","w":"w-2","v":"v-3"}}', json_encode($data)); + $this->assertEquals('c-1', $sources['m']['x']); + $this->assertEquals('c-1', $sources['m']['y']['r']); + $this->assertEquals('c-2', $sources['m']['w']); + $this->assertEquals('c-2', $sources['m']['y']['s']); + $this->assertEquals('c-3', $sources['m']['z']); + $this->assertEquals('c-3', $sources['m']['y']['u']); + } + + public function testConfiProcessorSources() + { + $processor = new ConfigProcessor(); + $loader = new YamlConfigLoader(); + $processor->extend($loader->load(__DIR__ . '/data/config-1.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-2.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-3.yml')); + + $sources = $processor->sources(); + + $data = $processor->export(); + $this->assertEquals('foo', $data['c']); + $this->assertEquals('foobar', $data['b']); + $this->assertEquals('foobarbaz', $data['a']); + + $this->assertEquals('3', $data['m'][0]); + + $this->assertEquals( __DIR__ . '/data/config-3.yml', $sources['a']); + $this->assertEquals( __DIR__ . '/data/config-2.yml', $sources['b']); + $this->assertEquals( __DIR__ . '/data/config-1.yml', $sources['c']); + $this->assertEquals( __DIR__ . '/data/config-3.yml', $sources['m']); + } + + public function testConfiProcessorSourcesLoadInReverseOrder() + { + $processor = new ConfigProcessor(); + $loader = new YamlConfigLoader(); + $processor->extend($loader->load(__DIR__ . '/data/config-3.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-2.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-1.yml')); + + $sources = $processor->sources(); + + $data = $processor->export(); + $this->assertEquals('foo', $data['c']); + $this->assertEquals('foobar', $data['b']); + $this->assertEquals('foobarbaz', $data['a']); + + $this->assertEquals('1', $data['m'][0]); + + $this->assertEquals( __DIR__ . '/data/config-3.yml', $sources['a']); + $this->assertEquals( __DIR__ . '/data/config-2.yml', $sources['b']); + $this->assertEquals( __DIR__ . '/data/config-1.yml', $sources['c']); + $this->assertEquals( __DIR__ . '/data/config-1.yml', $sources['m']); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigTest.php new file mode 100644 index 00000000..f2ace0ce --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigTest.php @@ -0,0 +1,140 @@ +set('foo', 'bar'); + $data = $config->export(); + $this->assertEquals('{"foo":"bar"}', json_encode($data)); + } + + public function testCombine() + { + // Pointless tests just to ensure everything is covered. + $config = new Config(); + $config->set('foo', 'bar'); + $config->set('baz', 'boz'); + $config2 = new Config(); + $config2->set('foo', 'fu'); + $config2->set('new', 'blue'); + $config->combine($config2->export()); + $this->assertEquals('fu', $config->get('foo')); + $this->assertEquals('boz', $config->get('baz')); + $this->assertEquals('blue', $config->get('new')); + } + + public function testDefault() + { + $data = [ + 'a' => 'foo', + 'b' => 'bar', + 'c' => 'boz', + ]; + + $foo = ["foo" => "bar"]; + + $config = new Config($data); + + $config->setDefault('c', 'other'); + $config->setDefault('d', 'other'); + $config->setDefault('f', $foo); + + $this->assertEquals('foo', $config->get('a')); + $this->assertEquals('boz', $config->get('c')); + $this->assertEquals('other', $config->get('d')); + $this->assertEquals('other', $config->getDefault('c')); + $this->assertEquals('', $config->get('e')); + $this->assertEquals('bar', $config->get('f.foo')); + $this->assertEquals('{"foo":"bar"}', json_encode($config->get('f'))); + } + + public function testDefaultsArray() + { + $data = ['a' => 'foo', 'b' => 'bar', 'c' => 'boz',]; + $defaults = ['d' => 'foo', 'e' => 'bar', 'f' => 'boz',]; + + // Create reflection class to test private methods + $configClass = new \ReflectionClass("Consolidation\Config\Config"); + + // $defaults + $defaultsProperty = $configClass->getProperty("defaults"); + $defaultsProperty->setAccessible(true); + + // $getDefaults + $getDefaultsMethod = $configClass->getMethod("getDefaults"); + $getDefaultsMethod->setAccessible(true); + + // Test the config class + $config = new Config($data); + + // Set $config::defaults to an array to test getter and setter + $defaultsProperty->setValue($config, $defaults); + $this->assertTrue(is_array($defaultsProperty->getValue($config))); + $this->assertInstanceOf('Dflydev\DotAccessData\Data', + $getDefaultsMethod->invoke($config)); + + // Set $config::defaults to a string to test exception + $defaultsProperty->setValue($config, "foo.bar"); + $this->setExpectedException("Exception"); + $getDefaultsMethod->invoke($config); + } + + public function testConfigurationWithCrossFileReferences() + { + $config = new Config(); + $processor = new ConfigProcessor(); + $loader = new YamlConfigLoader(); + $processor->extend($loader->load(__DIR__ . '/data/config-1.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-2.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-3.yml')); + + // Does not fail if configuration file cannot be found + $processor->extend($loader->load(__DIR__ . '/data/no-such-file.yml')); + + // We must capture the sources before exporting, as export + // dumps this information. + $sources = $processor->sources(); + + $config->import($processor->export()); + + $this->assertEquals(implode(',', $config->get('m')), '3'); + $this->assertEquals($config->get('a'), 'foobarbaz'); + + $this->assertEquals($sources['a'], __DIR__ . '/data/config-3.yml'); + $this->assertEquals($sources['b'], __DIR__ . '/data/config-2.yml'); + $this->assertEquals($sources['c'], __DIR__ . '/data/config-1.yml'); + } + + public function testConfigurationWithReverseOrderCrossFileReferences() + { + $config = new Config(); + $processor = new ConfigProcessor(); + $loader = new YamlConfigLoader(); + $processor->extend($loader->load(__DIR__ . '/data/config-3.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-2.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-1.yml')); + + $sources = $processor->sources(); + $config->import($processor->export()); + + $this->assertEquals(implode(',', $config->get('m')), '1'); + + if (strpos($config->get('a'), '$') !== false) { + throw new \PHPUnit_Framework_SkippedTestError( + 'Evaluation of cross-file references in reverse order not supported.' + ); + } + $this->assertEquals($config->get('a'), 'foobarbaz'); + + $this->assertEquals($sources['a'], __DIR__ . '/data/config-3.yml'); + $this->assertEquals($sources['b'], __DIR__ . '/data/config-2.yml'); + $this->assertEquals($sources['c'], __DIR__ . '/data/config-1.yml'); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/data/config-1.yml b/lib/composer/vendor/consolidation/config/tests/data/config-1.yml new file mode 100644 index 00000000..e8f55a9d --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/data/config-1.yml @@ -0,0 +1,3 @@ +c: foo +m: + - 1 diff --git a/lib/composer/vendor/consolidation/config/tests/data/config-2.yml b/lib/composer/vendor/consolidation/config/tests/data/config-2.yml new file mode 100644 index 00000000..baa7e63f --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/data/config-2.yml @@ -0,0 +1,3 @@ +b: ${c}bar +m: + - 2 diff --git a/lib/composer/vendor/consolidation/config/tests/data/config-3.yml b/lib/composer/vendor/consolidation/config/tests/data/config-3.yml new file mode 100644 index 00000000..d5895642 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/data/config-3.yml @@ -0,0 +1,3 @@ +a: ${b}baz +m: + - 3 diff --git a/lib/composer/vendor/consolidation/config/tests/scripts/install-scenario b/lib/composer/vendor/consolidation/config/tests/scripts/install-scenario new file mode 100755 index 00000000..d77d57d0 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/scripts/install-scenario @@ -0,0 +1,23 @@ +#!/bin/bash + +SCENARIO=$1 +ACTION=${2-install} + +dir=dependencies/${SCENARIO} +if [ -z "$SCENARIO" ] ; then + SCENARIO=default + dir=. +fi + + +if [ ! -d "$dir" ] ; then + echo "Requested scenario '${SCENARIO}' does not exist." + exit 1 +fi + +echo "Switch to ${SCENARIO} scenario" + +set -ex + +composer -n --working-dir=$dir ${ACTION} --prefer-dist --no-scripts +composer -n --working-dir=$dir info diff --git a/lib/composer/vendor/consolidation/config/tests/scripts/prep-dependencies b/lib/composer/vendor/consolidation/config/tests/scripts/prep-dependencies new file mode 100755 index 00000000..d1898440 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/scripts/prep-dependencies @@ -0,0 +1,66 @@ +#!/bin/bash + +# +# This script is called automatically on every `composer update`. +# See "post-update-cmd" in the "scripts" section of composer.json. +# +# This script will create a derived composer.json / composer.lock +# pair for every test scenario. Test scenarios are defined in the +# "scenarios" file, which should be customized to suit the needs +# of the project. +# + +SELF_DIRNAME="`dirname -- "$0"`" +source ${SELF_DIRNAME}/scenarios + +echo +echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" +echo "::" +echo ":: Update dependencies for the following scenarios:" +echo "::" +echo ":: ${SCENARIOS}" +echo "::" +echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" +echo + +set -ex + +for SCENARIO in ${SCENARIOS} ; do + + dir=dependencies/${SCENARIO} + + # Define indirect variable names + stability_variable="stability_${SCENARIO}" + requirement_variable="requirement_${SCENARIO}" + platform_php_variable="platform_php_${SCENARIO}" + + echo "### Create $dir/composer.json for ${SCENARIO} scenario" + mkdir -p $dir + cp composer.json $dir + + # Then set our own platform php version if applicable (otherwise unset it) + composer -n --working-dir=$dir config platform.php "${!platform_php_variable---unset}" + + # Temporarily set our vendor directory to 'vendor' + composer -n --working-dir=$dir config vendor-dir vendor + + # Set an appropriate minimum stability for this version of Symfony + composer -n --working-dir=$dir config minimum-stability "${!stability_variable-stable}" + + # Add a constraint to limit the Symfony version + composer -n --working-dir=$dir require --dev --no-update "${!requirement_variable}" + + # Create the composer.lock file. Ignore the vendor directory created. + composer -n --working-dir=$dir update --no-scripts + + # Set the vendor directory to its final desired location. + composer -n --working-dir=$dir config vendor-dir '../../vendor' + + # The 'autoload' section specifies directory paths that are relative + # to the composer.json file. We will drop in some symlinks so that + # these paths will resolve as if the composer.json were in the root. + for target in $AUTOLOAD_DIRECTORIES ; do + ln -s -f ../../$target $dir + done + +done diff --git a/lib/composer/vendor/consolidation/config/tests/scripts/scenarios b/lib/composer/vendor/consolidation/config/tests/scripts/scenarios new file mode 100755 index 00000000..6a8f81b2 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/scripts/scenarios @@ -0,0 +1,12 @@ +#!/bin/bash + +SCENARIOS="symfony2 symfony3 symfony4" + +AUTOLOAD_DIRECTORIES='src tests' + +platform_php_symfony2='5.4' +platform_php_symfony3='5.6' + +requirement_symfony2='symfony/console:^2.8' +requirement_symfony3='symfony/console:^3' +requirement_symfony4='symfony/console:^4' diff --git a/lib/composer/vendor/consolidation/config/tests/src/ApplyConfigTestTarget.php b/lib/composer/vendor/consolidation/config/tests/src/ApplyConfigTestTarget.php new file mode 100644 index 00000000..6dace2be --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/src/ApplyConfigTestTarget.php @@ -0,0 +1,43 @@ +dir = $dir; + return $this; + } + + /** + * A getter for the 'dir' property that we will use to + * determine if the setter was called. + */ + public function getDir() + { + return $this->dir; + } + + /** + * A bad setter that does not return $this. + */ + public function bad($value) + { + $this->value = $value; + } + + /** + * A getter for the bad setter. + */ + public function getBad() + { + return $this->value; + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/src/MyFooCommand.php b/lib/composer/vendor/consolidation/config/tests/src/MyFooCommand.php new file mode 100644 index 00000000..0487a024 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/src/MyFooCommand.php @@ -0,0 +1,47 @@ +setName('my:foo') + ->setDescription('My foo command.') + ->setHelp('This command tests command option injection by echoing its options') + ->addOption( + 'other', + null, + InputOption::VALUE_REQUIRED, + 'Some other option', + 'fish' + ) + ->addOption( + 'name', + null, + InputOption::VALUE_REQUIRED, + 'What is the name of the thing we are naming', + 'George' + ) + ->addOption( + 'dir', + null, + InputOption::VALUE_REQUIRED, + 'What is the base directory to use for this command', + '/default/path' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $output->writeln('Enter my:foo'); + $output->writeln('dir: ' . $input->getOption('dir')); + $output->writeln('name: ' . $input->getOption('name')); + $output->writeln('other: ' . $input->getOption('other')); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/src/TestLoader.php b/lib/composer/vendor/consolidation/config/tests/src/TestLoader.php new file mode 100644 index 00000000..241e5120 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/src/TestLoader.php @@ -0,0 +1,36 @@ +data = $data; + } + + public function setSourceName($name) + { + $this->sourceName = $name; + } + + public function export() + { + return $this->data; + } + + public function keys() + { + return array_keys($this->data); + } + + public function getSourceName() + { + return $this->sourceName; + } +} diff --git a/lib/composer/vendor/consolidation/log/.editorconfig b/lib/composer/vendor/consolidation/log/.editorconfig new file mode 100644 index 00000000..095771e6 --- /dev/null +++ b/lib/composer/vendor/consolidation/log/.editorconfig @@ -0,0 +1,15 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[**.php] +indent_style = space +indent_size = 4 + diff --git a/lib/composer/vendor/consolidation/log/.gitignore b/lib/composer/vendor/consolidation/log/.gitignore index c1cea0a5..c5082499 100644 --- a/lib/composer/vendor/consolidation/log/.gitignore +++ b/lib/composer/vendor/consolidation/log/.gitignore @@ -1,3 +1,3 @@ .DS_Store vendor -composer.lock +build diff --git a/lib/composer/vendor/consolidation/log/.travis.yml b/lib/composer/vendor/consolidation/log/.travis.yml new file mode 100644 index 00000000..9a2e350d --- /dev/null +++ b/lib/composer/vendor/consolidation/log/.travis.yml @@ -0,0 +1,47 @@ +language: php + +branches: + # Only test the master branch and SemVer tags. + only: + - master + - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ + +matrix: + include: + - + php: 7.1 + env: 'HIGHEST_LOWEST="update" STABILITY="RC"' + - + php: 7.0.11 + - + php: 5.6 + - + php: 5.5 + env: 'HIGHEST_LOWEST="update --prefer-lowest"' + +sudo: false + +cache: + directories: + - vendor + - $HOME/.composer/cache + +before_script: + # If running a highest/lowest dependencies test, get rid of composer.lock + - | + if [ -n "$HIGHEST_LOWEST" ] ; then + rm composer.lock + composer config --unset platform.php + composer config minimum-stability ${STABILITY-stable} + fi + - 'composer -n ${HIGHEST_LOWEST-install} --prefer-dist' + - composer why symfony/console + # Print out all of the installed packages in alphabetical order, with versions + - composer licenses + +script: + - vendor/bin/phpcs --standard=PSR2 -n src + - vendor/bin/phpunit + +after_success: + - travis_retry php vendor/bin/coveralls -v diff --git a/lib/composer/vendor/consolidation/log/CONTRIBUTING.md b/lib/composer/vendor/consolidation/log/CONTRIBUTING.md new file mode 100644 index 00000000..1bbf5736 --- /dev/null +++ b/lib/composer/vendor/consolidation/log/CONTRIBUTING.md @@ -0,0 +1,25 @@ +# Contributing to Consolidation + +Thank you for your interest in contributing to the Consolidation effort! Consolidation aims to provide reusable, loosely-coupled components useful for building command-line tools. Consolidation is built on top of Symfony Console, but aims to separate the tool from the implementation details of Symfony. + +Here are some of the guidelines you should follow to make the most of your efforts: + +## Code Style Guidelines + +Consolidation adheres to the [PSR-2 Coding Style Guide](http://www.php-fig.org/psr/psr-2/) for PHP code. + +## Pull Request Guidelines + +Every pull request is run through: + + - phpcs -n --standard=PSR2 src + - phpunit + - [Scrutinizer](https://scrutinizer-ci.com/g/consolidation-org/log/) + +It is easy to run the unit tests and code sniffer locally; simply ensure that `./vendor/bin` is in your `$PATH`, cd to the root of the project directory, and run `phpcs` and `phpunit` as shown above. To automatically fix coding standard errors, run: + + - phpcbf --standard=PSR2 src + +After submitting a pull request, please examine the Scrutinizer report. It is not required to fix all Scrutinizer issues; you may ignore recommendations that you disagree with. The spacing patches produced by Scrutinizer do not conform to PSR2 standards, and therefore should never be applied. DocBlock patches may be applied at your discression. Things that Scrutinizer identifies as a bug nearly always needs to be addressed. + +Pull requests must pass phpcs and phpunit in order to be merged; ideally, new functionality will also include new unit tests. diff --git a/lib/composer/vendor/consolidation/log/README.md b/lib/composer/vendor/consolidation/log/README.md index a11a8e8e..996b657a 100644 --- a/lib/composer/vendor/consolidation/log/README.md +++ b/lib/composer/vendor/consolidation/log/README.md @@ -1,16 +1,16 @@ # Consolidation\Log -Improved Psr-3 / Psr\Log logger based on Symfony Console components. +Improved [PSR-3](http://www.php-fig.org/psr/psr-3/) [Psr\Log](https://github.com/php-fig/log) logger based on Symfony Console components. -[![Circle CI](https://circleci.com/gh/consolidation-org/log.svg?style=svg)](https://circleci.com/gh/consolidation-org/log) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation-org/log/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation-org/log/?branch=master) [![Latest Stable Version](https://poser.pugx.org/consolidation/log/v/stable)](https://packagist.org/packages/consolidation/log) [![Total Downloads](https://poser.pugx.org/consolidation/log/downloads)](https://packagist.org/packages/consolidation/log) [![Latest Unstable Version](https://poser.pugx.org/consolidation/log/v/unstable)](https://packagist.org/packages/consolidation/log) [![License](https://poser.pugx.org/consolidation/log/license)](https://packagist.org/packages/consolidation/log) +[![Travis CI](https://travis-ci.org/consolidation-org/log.svg?branch=master)](https://travis-ci.org/consolidation-org/log) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation-org/log/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation-org/log/?branch=master) [![Coverage Status](https://coveralls.io/repos/github/consolidation-org/log/badge.svg?branch=master)](https://coveralls.io/github/consolidation-org/log?branch=master) [![License](https://poser.pugx.org/consolidation/log/license)](https://packagist.org/packages/consolidation/log) ## Component Status -In use in https://github.com/Codegyre/Robo +In use in [Robo](https://github.com/Codegyre/Robo). ## Motivation -Consolication\Log provides a Psr-3 compatible logger that provides styled log output to the standard error (stderr) stream. By default, styling is provided by the SymfonyStyle class from the Symfony Console component; however, alternative stylers may be provided if desired. +Consolidation\Log provides a Psr-3 compatible logger that provides styled log output to the standard error (stderr) stream. By default, styling is provided by the SymfonyStyle class from the Symfony Console component; however, alternative stylers may be provided if desired. ## Usage ``` @@ -18,7 +18,9 @@ $logger = new \Consolidation\Log\Logger($output); $logger->setLogOutputStyler(new LogOutputStyler()); // optional $logger->warning('The file {name} does not exist.', ['name' => $filename]); ``` -n.b. Substitution of replacements, such as `{name}` in the example above, is not required by Psr-3' however, this is often done (e.g. in the Symfony Console logger). +String interpolation -- that is, the substitution of replacements, such as `{name}` in the example above, is not required by Psr-3, and is not implemented by default in the Psr\Log project. However, it is recommended by PRS-3, and is often done, e.g. in the Symfony Console logger. + +Consolidation\Log supports string interpolation. ## Comparison to Existing Solutions diff --git a/lib/composer/vendor/consolidation/log/circle.yml b/lib/composer/vendor/consolidation/log/circle.yml deleted file mode 100644 index 2be28fa5..00000000 --- a/lib/composer/vendor/consolidation/log/circle.yml +++ /dev/null @@ -1,12 +0,0 @@ -machine: - php: - version: 5.5.11 - hosts: - localhost: 127.0.0.1 - -test: - override: - - vendor/bin/phpcs --standard=PSR2 -n src - # See: https://circleci.com/docs/test-metadata#phpunit - - mkdir -p $CIRCLE_TEST_REPORTS/phpunit - - vendor/bin/phpunit --log-junit $CIRCLE_TEST_REPORTS/phpunit/junit.xml diff --git a/lib/composer/vendor/consolidation/log/composer.json b/lib/composer/vendor/consolidation/log/composer.json index b6ba0018..fb4aa367 100644 --- a/lib/composer/vendor/consolidation/log/composer.json +++ b/lib/composer/vendor/consolidation/log/composer.json @@ -21,15 +21,22 @@ "require": { "php": ">=5.5.0", "psr/log": "~1.0", - "symfony/console": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4" }, "require-dev": { "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", "squizlabs/php_codesniffer": "2.*" }, + "minimum-stability": "stable", "extra": { "branch-alias": { "dev-master": "1.x-dev" } + }, + "config": { + "platform": { + "php": "5.6" + } } } diff --git a/lib/composer/vendor/consolidation/log/composer.lock b/lib/composer/vendor/consolidation/log/composer.lock new file mode 100644 index 00000000..e70cd5ef --- /dev/null +++ b/lib/composer/vendor/consolidation/log/composer.lock @@ -0,0 +1,1924 @@ +{ + "_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": "848954b205ebe83dda1672291b55d07c", + "packages": [ + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "symfony/console", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/63cd7960a0a522c3537f6326706d7f3b8de65805", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-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": "2017-11-16T15:24:32+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "74557880e2846b5c84029faa96b834da37e29810" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/74557880e2846b5c84029faa96b834da37e29810", + "reference": "74557880e2846b5c84029faa96b834da37e29810", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "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 Debug Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T16:38:39+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-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": "2017-10-11T12:05:26+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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": "2015-06-14T21:17:01+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": "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": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "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-10T14:09:06+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": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.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": "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": "2015-10-06T15:47:00+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": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.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": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+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": "satooshi/php-coveralls", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-10-14T23:16:28+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "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.4-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-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/8d2649077dc54dfbaf521d31f217383d82303c5f", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3", + "symfony/finder": "~3.3", + "symfony/yaml": "~3.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:16:22+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "77db266766b54db3ee982fe51868328b887ce15c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/77db266766b54db3ee982fe51868328b887ce15c", + "reference": "77db266766b54db3ee982fe51868328b887ce15c", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:12:55+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T19:02:53+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0938408c4faa518d95230deabb5f595bf0de31b9", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-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": "2017-11-10T18:26:04+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.5.0" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.6" + } +} diff --git a/lib/composer/vendor/consolidation/log/phpunit.xml.dist b/lib/composer/vendor/consolidation/log/phpunit.xml.dist index 4c5e0b93..73f3e76a 100644 --- a/lib/composer/vendor/consolidation/log/phpunit.xml.dist +++ b/lib/composer/vendor/consolidation/log/phpunit.xml.dist @@ -4,4 +4,12 @@ tests + + + + + + src + + diff --git a/lib/composer/vendor/consolidation/output-formatters/.gitignore b/lib/composer/vendor/consolidation/output-formatters/.gitignore index ae5ae728..f122e5b9 100644 --- a/lib/composer/vendor/consolidation/output-formatters/.gitignore +++ b/lib/composer/vendor/consolidation/output-formatters/.gitignore @@ -3,5 +3,4 @@ phpunit.xml build vendor -composer.lock main.php diff --git a/lib/composer/vendor/consolidation/output-formatters/.travis.yml b/lib/composer/vendor/consolidation/output-formatters/.travis.yml index 2c11c39c..38dfb562 100644 --- a/lib/composer/vendor/consolidation/output-formatters/.travis.yml +++ b/lib/composer/vendor/consolidation/output-formatters/.travis.yml @@ -6,11 +6,20 @@ branches: - master - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ -php: - - 7.0 - - 5.6 - - 5.5 - - 5.4 +matrix: + include: + - + php: 7.1 + env: 'HIGHEST_LOWEST="update" STABILITY="RC"' + - + php: 7.0.11 + - + php: 5.6 + - + php: 5.5 + - + php: 5.4 + env: 'HIGHEST_LOWEST="update --prefer-lowest"' sudo: false @@ -20,7 +29,17 @@ cache: - $HOME/.composer/cache before_script: - - composer install + # If running a highest/lowest dependencies test, get rid of composer.lock + - | + if [ -n "$HIGHEST_LOWEST" ] ; then + rm composer.lock + composer config --unset platform.php + composer config minimum-stability ${STABILITY-stable} + fi + - 'composer -n ${HIGHEST_LOWEST-install} --prefer-dist' + - composer why symfony/console + # Print out all of the installed packages in alphabetical order, with versions + - composer licenses script: - vendor/bin/phpunit diff --git a/lib/composer/vendor/consolidation/output-formatters/CHANGELOG.md b/lib/composer/vendor/consolidation/output-formatters/CHANGELOG.md index 776c5b62..dd80b3f8 100644 --- a/lib/composer/vendor/consolidation/output-formatters/CHANGELOG.md +++ b/lib/composer/vendor/consolidation/output-formatters/CHANGELOG.md @@ -1,5 +1,52 @@ # Change Log +### 3.1.13 - 29 November 2017 + +- Allow XML output for RowsOfFields (#60). +- Allow Symfony 4 components and add make tests run on three versions of Symfony. + +### 3.1.12 - 12 October 2017 + +- Bugfix: Use InputOption::VALUE_REQUIRED instead of InputOption::VALUE_OPTIONAL + for injected options such as --format and --fields. +- Bugfix: Ignore empty properties in the property parser. + +### 3.1.11 - 17 August 2017 + +- Add ListDataFromKeys marker data type. + +### 3.1.10 - 6 June 2017 + +- Typo in CalculateWidths::distributeLongColumns causes failure for some column width distributions + +### 3.1.9 - 8 May 2017 + +- Improve wrapping algorithm + +### 3.1.7 - 20 Jan 2017 + +- Add Windows testing + +### 3.1.6 - 8 Jan 2017 + +- Move victorjonsson/markdowndocs to require-dev + +### 3.1.5 - 23 November 2016 + +- When converting from XML to an array, use the 'id' or 'name' element as the array key value. + +### 3.1.4 - 20 November 2016 + +- Add a 'list delimiter' formatter option, so that we can create a Drush-style table for property lists. + +### 3.1.1 ~ 3.1.3 - 18 November 2016 + +- Fine-tune wordwrapping. + +### 3.1.0 - 17 November 2016 + +- Add wordwrapping to table formatter. + ### 3.0.0 - 14 November 2016 - **Breaking** The RenderCellInterface is now provided a reference to the entire row data. Existing clients need only add the new parameter to their method defnition to update. @@ -9,10 +56,6 @@ ### 2.1.0 - 7 November 2016 - Add RenderCellCollections to structured lists, so that commands may add renderers to structured data without defining a new structured data subclass. - - -### 2.0.1 - 4 October 2016 - - Throw an exception if the client requests a field that does not exist. - Remove unwanted extra layer of nesting when formatting an PropertyList with an array formatter (json, yaml, etc.). diff --git a/lib/composer/vendor/consolidation/output-formatters/README.md b/lib/composer/vendor/consolidation/output-formatters/README.md index 7b9b912f..d95616a9 100644 --- a/lib/composer/vendor/consolidation/output-formatters/README.md +++ b/lib/composer/vendor/consolidation/output-formatters/README.md @@ -2,7 +2,11 @@ Apply transformations to structured data to write output in different formats. -[![Travis CI](https://travis-ci.org/consolidation/output-formatters.svg?branch=master)](https://travis-ci.org/consolidation/output-formatters) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/output-formatters/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/output-formatters/?branch=master) [![Coverage Status](https://coveralls.io/repos/github/consolidation/output-formatters/badge.svg?branch=master)](https://coveralls.io/github/consolidation/output-formatters?branch=master) [![License](https://poser.pugx.org/consolidation/output-formatters/license)](https://packagist.org/packages/consolidation/output-formatters) +[![Travis CI](https://travis-ci.org/consolidation/output-formatters.svg?branch=master)](https://travis-ci.org/consolidation/output-formatters) +[![Windows CI](https://ci.appveyor.com/api/projects/status/umyfuujca6d2g2k6?svg=true)](https://ci.appveyor.com/project/greg-1-anderson/output-formatters) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/output-formatters/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/output-formatters/?branch=master) +[![Coverage Status](https://coveralls.io/repos/github/consolidation/output-formatters/badge.svg?branch=master)](https://coveralls.io/github/consolidation/output-formatters?branch=master) +[![License](https://poser.pugx.org/consolidation/output-formatters/license)](https://packagist.org/packages/consolidation/output-formatters) ## Component Status @@ -50,6 +54,7 @@ Most formatters will operate on any array or ArrayObject data. Some formatters r - `RowsOfFields`: Each row contains an associative array of field:value pairs. It is also assumed that the fields of each row are the same for every row. This format is ideal for displaying in a table, with labels in the top row. - `PropertyList`: Each row contains a field:value pair. Each field is unique. This format is ideal for displaying in a table, with labels in the first column and values in the second common. +- `ListDataFromKeys`: The result may be structured or unstructured data. When formatted with the --format=list formatter, the result will come from the array keys instead of the array values. - `DOMDocument`: The standard PHP DOM document class may be used by functions that need to be able to presicely specify the exact attributes and children when the XML output format is used. Commands that return table structured data with fields can be filtered and/or re-ordered by using the --fields option. These structured data types can also be formatted into a more generic type such as yaml or json, even after being filtered. This capabilities are not available if the data is returned in a bare php array. diff --git a/lib/composer/vendor/consolidation/output-formatters/appveyor.yml b/lib/composer/vendor/consolidation/output-formatters/appveyor.yml new file mode 100644 index 00000000..3e08fa1c --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/appveyor.yml @@ -0,0 +1,68 @@ +build: false +shallow_clone: true +platform: 'x86' +clone_folder: C:\projects\output-formatters +branches: + only: + - master + +## Cache composer bits +cache: + - '%LOCALAPPDATA%\Composer\files -> composer.lock' + +init: + #https://github.com/composer/composer/blob/master/appveyor.yml + #- SET ANSICON=121x90 (121x90) + +# Inspired by https://github.com/Codeception/base/blob/master/appveyor.yml and https://github.com/phpmd/phpmd/blob/master/appveyor.yml +install: + - cinst -y curl + - SET PATH=C:\Program Files\curl;%PATH% + #which is only needed by the test suite. + - cinst -y which + - SET PATH=C:\Program Files\which;%PATH% + - git clone -q https://github.com/acquia/DevDesktopCommon.git #For tar, cksum, ... + - SET PATH=%APPVEYOR_BUILD_FOLDER%/DevDesktopCommon/bintools-win/msys/bin;%PATH% + - SET PATH=C:\Program Files\MySql\MySQL Server 5.7\bin\;%PATH% + #Install PHP per https://blog.wyrihaximus.net/2016/11/running-php-unit-tests-on-windows-using-appveyor-and-chocolatey/ + - ps: appveyor-retry cinst --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $Env:php_ver_target | Select-Object -first 1) -replace '[php|]','') + - cd c:\tools\php70 + - copy php.ini-production php.ini + + - echo extension_dir=ext >> php.ini + - echo extension=php_openssl.dll >> php.ini + - echo date.timezone="UTC" >> php.ini + - echo variables_order="EGPCS" >> php.ini #May be unneeded. + - echo mbstring.http_input=pass >> php.ini + - echo mbstring.http_output=pass >> php.ini + - echo sendmail_path=nul >> php.ini + - echo extension=php_mbstring.dll >> php.ini + - echo extension=php_curl.dll >> php.ini + - echo extension=php_pdo_mysql.dll >> php.ini + - echo extension=php_pdo_pgsql.dll >> php.ini + - echo extension=php_pdo_sqlite.dll >> php.ini + - echo extension=php_pgsql.dll >> php.ini + - echo extension=php_gd2.dll >> php.ini + - SET PATH=C:\tools\php70;%PATH% + #Install Composer + - cd %APPVEYOR_BUILD_FOLDER% + #- appveyor DownloadFile https://getcomposer.org/composer.phar + - php -r "readfile('http://getcomposer.org/installer');" | php + #Install dependencies via Composer. + #Newer versions of the dependencies have whitespace differences that break tests. + #Maybe we should fix and do highest/lowest here someday. + - copy composer.windows.lock composer.lock + - php composer.phar -q install --prefer-dist -n + - SET PATH=%APPVEYOR_BUILD_FOLDER%;%APPVEYOR_BUILD_FOLDER%/vendor/bin;%PATH% + #Create a sandbox for testing. Don't think we need this. + - mkdir c:\test_temp + +test_script: + - php composer.phar test + - php composer.phar cs + +# environment variables +environment: + global: + php_ver_target: 7.0 + diff --git a/lib/composer/vendor/consolidation/output-formatters/composer.json b/lib/composer/vendor/consolidation/output-formatters/composer.json index 4a1a92a2..adaba21d 100644 --- a/lib/composer/vendor/consolidation/output-formatters/composer.json +++ b/lib/composer/vendor/consolidation/output-formatters/composer.json @@ -20,14 +20,14 @@ }, "require": { "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" }, "scripts": { "api": "phpdoc-md generate src > docs/api.md", @@ -37,7 +37,12 @@ }, "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" + } + }, + "config": { + "platform": { + "php": "5.6" } } } diff --git a/lib/composer/vendor/consolidation/output-formatters/composer.lock b/lib/composer/vendor/consolidation/output-formatters/composer.lock new file mode 100644 index 00000000..c63b1420 --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/composer.lock @@ -0,0 +1,2017 @@ +{ + "_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": "146e545ed52a26233e2be70eddd6be2a", + "packages": [ + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "symfony/console", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/63cd7960a0a522c3537f6326706d7f3b8de65805", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-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": "2017-11-16T15:24:32+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "74557880e2846b5c84029faa96b834da37e29810" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/74557880e2846b5c84029faa96b834da37e29810", + "reference": "74557880e2846b5c84029faa96b834da37e29810", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "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 Debug Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T16:38:39+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/138af5ec075d4b1d1bd19de08c38a34bb2d7d880", + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-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": "2017-11-05T15:47:03+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-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": "2017-10-11T12:05:26+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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": "2015-06-14T21:17:01+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": "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": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "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-10T14:09:06+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": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.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": "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": "2015-10-06T15:47:00+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": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.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": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+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": "satooshi/php-coveralls", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-10-14T23:16:28+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "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.4-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-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/8d2649077dc54dfbaf521d31f217383d82303c5f", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3", + "symfony/finder": "~3.3", + "symfony/yaml": "~3.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:16:22+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "77db266766b54db3ee982fe51868328b887ce15c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/77db266766b54db3ee982fe51868328b887ce15c", + "reference": "77db266766b54db3ee982fe51868328b887ce15c", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:12:55+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T19:02:53+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0938408c4faa518d95230deabb5f595bf0de31b9", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-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": "2017-11-10T18:26:04+00:00" + }, + { + "name": "victorjonsson/markdowndocs", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", + "reference": "c5eb16ff5bd15ee60223883ddacba0ab8797268d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/c5eb16ff5bd15ee60223883ddacba0ab8797268d", + "reference": "c5eb16ff5bd15ee60223883ddacba0ab8797268d", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/console": ">=2.6" + }, + "require-dev": { + "phpunit/phpunit": "3.7.23" + }, + "bin": [ + "bin/phpdoc-md" + ], + "type": "library", + "autoload": { + "psr-0": { + "PHPDocsMD": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Victor Jonsson", + "email": "kontakt@victorjonsson.se" + } + ], + "description": "Command line tool for generating markdown-formatted class documentation", + "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", + "time": "2017-04-20T09:52:47+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.0" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.6" + } +} diff --git a/lib/composer/vendor/consolidation/output-formatters/composer.windows.lock b/lib/composer/vendor/consolidation/output-formatters/composer.windows.lock new file mode 100644 index 00000000..1e785e31 --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/composer.windows.lock @@ -0,0 +1,1897 @@ +{ + "_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": "53383765106ab1ba9cdfba5be3aecd2c", + "packages": [ + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "symfony/console", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/7a8405a9fc175f87fed8a3c40856b0d866d61936", + "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-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": "2017-02-06T12:04:21+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/b4d9818f127c60ce21ed62c395da7df868dc8477", + "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "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 Debug Component", + "homepage": "https://symfony.com", + "time": "2017-01-28T02:37:08+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "8c71141cae8e2957946b403cc71a67213c0380d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/8c71141cae8e2957946b403cc71a67213c0380d6", + "reference": "8c71141cae8e2957946b403cc71a67213c0380d6", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-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": "2017-01-02T20:32:22+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-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": "2016-11-14T01:06:16+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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": "2015-06-14T21:17:01+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "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": "2015-12-27T11:43:31+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "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": "2016-09-30T07:12:33+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "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": "2016-11-25T06:54:22+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0|^2.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.0", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.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": "2016-11-21T14:58:47+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.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": "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": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "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": "2016-10-03T07:40:28+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.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "type": "library", + "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": "2016-05-12T18:03:57+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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": "2016-11-15T14:06:22+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.35", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.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": "2017-02-06T05:18:07+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/satooshi/php-coveralls.git", + "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/da51d304fe8622bf9a6da39a8446e7afd432115c", + "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzle/guzzle": "^2.8|^3.0", + "php": ">=5.3.3", + "psr/log": "^1.0", + "symfony/config": "^2.1|^3.0", + "symfony/console": "^2.1|^3.0", + "symfony/stopwatch": "^2.0|^3.0", + "symfony/yaml": "^2.0|^3.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "Satooshi\\": "src/Satooshi/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/satooshi/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2016-01-20T17:35:46+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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": "2015-12-08T07:14:41+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2015-11-11T19:50:13+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "86dd55a522238211f9f3631e3361703578941d9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/86dd55a522238211f9f3631e3361703578941d9a", + "reference": "86dd55a522238211f9f3631e3361703578941d9a", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-02-02T03:30:00+00:00" + }, + { + "name": "symfony/config", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "2ffa7b84d647b8be1788d46b44e438cb3d62056c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/2ffa7b84d647b8be1788d46b44e438cb3d62056c", + "reference": "2ffa7b84d647b8be1788d46b44e438cb3d62056c", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/filesystem": "~2.8|~3.0" + }, + "require-dev": { + "symfony/yaml": "~3.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 Config Component", + "homepage": "https://symfony.com", + "time": "2017-02-06T12:04:21+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "74877977f90fb9c3e46378d5764217c55f32df34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/74877977f90fb9c3e46378d5764217c55f32df34", + "reference": "74877977f90fb9c3e46378d5764217c55f32df34", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.0,>=2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-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": "2017-01-02T20:30:24+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "a0c6ef2dc78d33b58d91d3a49f49797a184d06f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/a0c6ef2dc78d33b58d91d3a49f49797a184d06f4", + "reference": "a0c6ef2dc78d33b58d91d3a49f49797a184d06f4", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-01-08T20:47:33+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "9aa0b51889c01bca474853ef76e9394b02264464" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/9aa0b51889c01bca474853ef76e9394b02264464", + "reference": "9aa0b51889c01bca474853ef76e9394b02264464", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-01-02T20:32:22+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "e1718c6bf57e1efbb8793ada951584b2ab27775b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e1718c6bf57e1efbb8793ada951584b2ab27775b", + "reference": "e1718c6bf57e1efbb8793ada951584b2ab27775b", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-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": "2017-01-21T17:06:35+00:00" + }, + { + "name": "victorjonsson/markdowndocs", + "version": "1.3.7", + "source": { + "type": "git", + "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", + "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", + "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/console": ">=2.6" + }, + "require-dev": { + "phpunit/phpunit": "3.7.23" + }, + "bin": [ + "bin/phpdoc-md" + ], + "type": "library", + "autoload": { + "psr-0": { + "PHPDocsMD": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Victor Jonsson", + "email": "kontakt@victorjonsson.se" + } + ], + "description": "Command line tool for generating markdown-formatted class documentation", + "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", + "time": "2016-10-11T21:10:19+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.0" + }, + "platform-dev": [] +} diff --git a/lib/composer/vendor/consolidation/output-formatters/docs/api.md b/lib/composer/vendor/consolidation/output-formatters/docs/api.md index 279f5c16..b6da447e 100644 --- a/lib/composer/vendor/consolidation/output-formatters/docs/api.md +++ b/lib/composer/vendor/consolidation/output-formatters/docs/api.md @@ -1,53 +1,58 @@ ## Table of contents - [\Consolidation\OutputFormatters\FormatterManager](#class-consolidationoutputformattersformattermanager) +- [\Consolidation\OutputFormatters\Exception\UnknownFormatException](#class-consolidationoutputformattersexceptionunknownformatexception) - [\Consolidation\OutputFormatters\Exception\AbstractDataFormatException (abstract)](#class-consolidationoutputformattersexceptionabstractdataformatexception-abstract) - [\Consolidation\OutputFormatters\Exception\IncompatibleDataException](#class-consolidationoutputformattersexceptionincompatibledataexception) - [\Consolidation\OutputFormatters\Exception\InvalidFormatException](#class-consolidationoutputformattersexceptioninvalidformatexception) - [\Consolidation\OutputFormatters\Exception\UnknownFieldException](#class-consolidationoutputformattersexceptionunknownfieldexception) -- [\Consolidation\OutputFormatters\Exception\UnknownFormatException](#class-consolidationoutputformattersexceptionunknownformatexception) -- [\Consolidation\OutputFormatters\Formatters\CsvFormatter](#class-consolidationoutputformattersformatterscsvformatter) -- [\Consolidation\OutputFormatters\Formatters\FormatterInterface (interface)](#interface-consolidationoutputformattersformattersformatterinterface) -- [\Consolidation\OutputFormatters\Formatters\JsonFormatter](#class-consolidationoutputformattersformattersjsonformatter) - [\Consolidation\OutputFormatters\Formatters\ListFormatter](#class-consolidationoutputformattersformatterslistformatter) -- [\Consolidation\OutputFormatters\Formatters\PrintRFormatter](#class-consolidationoutputformattersformattersprintrformatter) -- [\Consolidation\OutputFormatters\Formatters\RenderDataInterface (interface)](#interface-consolidationoutputformattersformattersrenderdatainterface) - [\Consolidation\OutputFormatters\Formatters\SectionsFormatter](#class-consolidationoutputformattersformatterssectionsformatter) +- [\Consolidation\OutputFormatters\Formatters\JsonFormatter](#class-consolidationoutputformattersformattersjsonformatter) +- [\Consolidation\OutputFormatters\Formatters\FormatterInterface (interface)](#interface-consolidationoutputformattersformattersformatterinterface) +- [\Consolidation\OutputFormatters\Formatters\CsvFormatter](#class-consolidationoutputformattersformatterscsvformatter) - [\Consolidation\OutputFormatters\Formatters\SerializeFormatter](#class-consolidationoutputformattersformattersserializeformatter) - [\Consolidation\OutputFormatters\Formatters\StringFormatter](#class-consolidationoutputformattersformattersstringformatter) -- [\Consolidation\OutputFormatters\Formatters\TableFormatter](#class-consolidationoutputformattersformatterstableformatter) -- [\Consolidation\OutputFormatters\Formatters\TsvFormatter](#class-consolidationoutputformattersformatterstsvformatter) - [\Consolidation\OutputFormatters\Formatters\VarExportFormatter](#class-consolidationoutputformattersformattersvarexportformatter) -- [\Consolidation\OutputFormatters\Formatters\XmlFormatter](#class-consolidationoutputformattersformattersxmlformatter) - [\Consolidation\OutputFormatters\Formatters\YamlFormatter](#class-consolidationoutputformattersformattersyamlformatter) -- [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) +- [\Consolidation\OutputFormatters\Formatters\TableFormatter](#class-consolidationoutputformattersformatterstableformatter) +- [\Consolidation\OutputFormatters\Formatters\XmlFormatter](#class-consolidationoutputformattersformattersxmlformatter) +- [\Consolidation\OutputFormatters\Formatters\PrintRFormatter](#class-consolidationoutputformattersformattersprintrformatter) +- [\Consolidation\OutputFormatters\Formatters\RenderDataInterface (interface)](#interface-consolidationoutputformattersformattersrenderdatainterface) +- [\Consolidation\OutputFormatters\Formatters\TsvFormatter](#class-consolidationoutputformattersformatterstsvformatter) - [\Consolidation\OutputFormatters\Options\OverrideOptionsInterface (interface)](#interface-consolidationoutputformattersoptionsoverrideoptionsinterface) -- [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList (abstract)](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract) -- [\Consolidation\OutputFormatters\StructuredData\AssociativeList](#class-consolidationoutputformattersstructureddataassociativelist) -- [\Consolidation\OutputFormatters\StructuredData\CallableRenderer](#class-consolidationoutputformattersstructureddatacallablerenderer) +- [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) - [\Consolidation\OutputFormatters\StructuredData\ListDataInterface (interface)](#interface-consolidationoutputformattersstructureddatalistdatainterface) -- [\Consolidation\OutputFormatters\StructuredData\OriginalDataInterface (interface)](#interface-consolidationoutputformattersstructureddataoriginaldatainterface) -- [\Consolidation\OutputFormatters\StructuredData\PropertyList](#class-consolidationoutputformattersstructureddatapropertylist) -- [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface (interface)](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface) -- [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface (interface)](#interface-consolidationoutputformattersstructureddatarendercellinterface) -- [\Consolidation\OutputFormatters\StructuredData\RestructureInterface (interface)](#interface-consolidationoutputformattersstructureddatarestructureinterface) -- [\Consolidation\OutputFormatters\StructuredData\RowsOfFields](#class-consolidationoutputformattersstructureddatarowsoffields) - [\Consolidation\OutputFormatters\StructuredData\TableDataInterface (interface)](#interface-consolidationoutputformattersstructureddatatabledatainterface) +- [\Consolidation\OutputFormatters\StructuredData\HelpDocument](#class-consolidationoutputformattersstructureddatahelpdocument) +- [\Consolidation\OutputFormatters\StructuredData\OriginalDataInterface (interface)](#interface-consolidationoutputformattersstructureddataoriginaldatainterface) +- [\Consolidation\OutputFormatters\StructuredData\RowsOfFields](#class-consolidationoutputformattersstructureddatarowsoffields) +- [\Consolidation\OutputFormatters\StructuredData\RestructureInterface (interface)](#interface-consolidationoutputformattersstructureddatarestructureinterface) +- [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList (abstract)](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract) +- [\Consolidation\OutputFormatters\StructuredData\ListDataFromKeys](#class-consolidationoutputformattersstructureddatalistdatafromkeys) +- [\Consolidation\OutputFormatters\StructuredData\PropertyList](#class-consolidationoutputformattersstructureddatapropertylist) +- [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface (interface)](#interface-consolidationoutputformattersstructureddatarendercellinterface) +- [\Consolidation\OutputFormatters\StructuredData\CallableRenderer](#class-consolidationoutputformattersstructureddatacallablerenderer) +- [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface (interface)](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface) +- [\Consolidation\OutputFormatters\StructuredData\AssociativeList](#class-consolidationoutputformattersstructureddataassociativelist) +- [\Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface (interface)](#interface-consolidationoutputformattersstructureddataxmlxmlschemainterface) - [\Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface (interface)](#interface-consolidationoutputformattersstructureddataxmldomdatainterface) - [\Consolidation\OutputFormatters\StructuredData\Xml\XmlSchema](#class-consolidationoutputformattersstructureddataxmlxmlschema) -- [\Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface (interface)](#interface-consolidationoutputformattersstructureddataxmlxmlschemainterface) -- [\Consolidation\OutputFormatters\Transformations\DomToArraySimplifier](#class-consolidationoutputformatterstransformationsdomtoarraysimplifier) -- [\Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface (interface)](#interface-consolidationoutputformatterstransformationsoverriderestructureinterface) -- [\Consolidation\OutputFormatters\Transformations\PropertyListTableTransformation](#class-consolidationoutputformatterstransformationspropertylisttabletransformation) - [\Consolidation\OutputFormatters\Transformations\PropertyParser](#class-consolidationoutputformatterstransformationspropertyparser) -- [\Consolidation\OutputFormatters\Transformations\ReorderFields](#class-consolidationoutputformatterstransformationsreorderfields) -- [\Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface (interface)](#interface-consolidationoutputformatterstransformationssimplifytoarrayinterface) +- [\Consolidation\OutputFormatters\Transformations\PropertyListTableTransformation](#class-consolidationoutputformatterstransformationspropertylisttabletransformation) - [\Consolidation\OutputFormatters\Transformations\TableTransformation](#class-consolidationoutputformatterstransformationstabletransformation) +- [\Consolidation\OutputFormatters\Transformations\ReorderFields](#class-consolidationoutputformatterstransformationsreorderfields) +- [\Consolidation\OutputFormatters\Transformations\DomToArraySimplifier](#class-consolidationoutputformatterstransformationsdomtoarraysimplifier) - [\Consolidation\OutputFormatters\Transformations\WordWrapper](#class-consolidationoutputformatterstransformationswordwrapper) +- [\Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface (interface)](#interface-consolidationoutputformatterstransformationsoverriderestructureinterface) +- [\Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface (interface)](#interface-consolidationoutputformatterstransformationssimplifytoarrayinterface) +- [\Consolidation\OutputFormatters\Transformations\Wrap\CalculateWidths](#class-consolidationoutputformatterstransformationswrapcalculatewidths) +- [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) - [\Consolidation\OutputFormatters\Validate\ValidationInterface (interface)](#interface-consolidationoutputformattersvalidatevalidationinterface) - [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface (interface)](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface) -


+
+ ### Class: \Consolidation\OutputFormatters\FormatterManager > Manage a collection of formatters; return one on request. @@ -76,7 +81,22 @@ | protected | simplifyToArray(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | | protected | validateAndRestructure([\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface) $formatter, mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | -
+
+ +### Class: \Consolidation\OutputFormatters\Exception\UnknownFormatException + +> Indicates that the requested format does not exist. + +| Visibility | Function | +|:-----------|:---------| +| public | __construct(mixed $format) : void | + +*This class extends \Exception* + +*This class implements \Throwable* + +
+ ### Class: \Consolidation\OutputFormatters\Exception\AbstractDataFormatException (abstract) > Contains some helper functions used by exceptions in this project. @@ -91,7 +111,8 @@ *This class implements \Throwable* -
+
+ ### Class: \Consolidation\OutputFormatters\Exception\IncompatibleDataException > Represents an incompatibility between the output data and selected formatter. @@ -104,7 +125,8 @@ *This class implements \Throwable* -
+
+ ### Class: \Consolidation\OutputFormatters\Exception\InvalidFormatException > Represents an incompatibility between the output data and selected formatter. @@ -117,7 +139,8 @@ *This class implements \Throwable* -
+
+ ### Class: \Consolidation\OutputFormatters\Exception\UnknownFieldException > Indicates that the requested format does not exist. @@ -130,20 +153,60 @@ *This class implements \Throwable* -
-### Class: \Consolidation\OutputFormatters\Exception\UnknownFormatException +
-> Indicates that the requested format does not exist. +### Class: \Consolidation\OutputFormatters\Formatters\ListFormatter + +> Display the data in a simple list. This formatter prints a plain, unadorned list of data, with each data item appearing on a separate line. If you wish your list to contain headers, then use the table formatter, and wrap your data in an PropertyList. | Visibility | Function | |:-----------|:---------| -| public | __construct(mixed $format) : void | +| public | overrideRestructure(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Select data to use directly from the structured output, before the restructure operation has been executed. | +| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | +| protected | renderEachCell(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | -*This class extends \Exception* +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface](#interface-consolidationoutputformatterstransformationsoverriderestructureinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* -*This class implements \Throwable* +
+ +### Class: \Consolidation\OutputFormatters\Formatters\SectionsFormatter + +> Display sections of data. This formatter takes data in the RowsOfFields data type. Each row represents one section; the data in each section is rendered in two columns, with the key in the first column and the value in the second column. + +| Visibility | Function | +|:-----------|:---------| +| public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return the list of data types acceptable to this formatter | +| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | +| public | validDataTypes() : void | +| public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | +| protected | renderEachCell(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | + +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* + +
+ +### Class: \Consolidation\OutputFormatters\Formatters\JsonFormatter + +> Json formatter Convert an array or ArrayObject into Json. + +| Visibility | Function | +|:-----------|:---------| +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | + +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\Formatters\FormatterInterface + +| Visibility | Function | +|:-----------|:---------| +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | + +
-
### Class: \Consolidation\OutputFormatters\Formatters\CsvFormatter > Comma-separated value formatters Display the provided structured data in a comma-separated list. If there are multiple records provided, then they will be printed one per line. The primary data types accepted are RowsOfFields and PropertyList. The later behaves exactly like the former, save for the fact that it contains but a single row. This formmatter can also accept a PHP array; this is also interpreted as a single-row of data with no header. @@ -162,73 +225,8 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* -
-### Interface: \Consolidation\OutputFormatters\Formatters\FormatterInterface +
-| Visibility | Function | -|:-----------|:---------| -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | - -
-### Class: \Consolidation\OutputFormatters\Formatters\JsonFormatter - -> Json formatter Convert an array or ArrayObject into Json. - -| Visibility | Function | -|:-----------|:---------| -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | - -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* - -
-### Class: \Consolidation\OutputFormatters\Formatters\ListFormatter - -> Display the data in a simple list. This formatter prints a plain, unadorned list of data, with each data item appearing on a separate line. If you wish your list to contain headers, then use the table formatter, and wrap your data in an PropertyList. - -| Visibility | Function | -|:-----------|:---------| -| public | overrideRestructure(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Select data to use directly from the structured output, before the restructure operation has been executed. | -| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | -| protected | renderEachCell(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | - -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface](#interface-consolidationoutputformatterstransformationsoverriderestructureinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* - -
-### Class: \Consolidation\OutputFormatters\Formatters\PrintRFormatter - -> Print_r formatter Run provided date thruogh print_r. - -| Visibility | Function | -|:-----------|:---------| -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | - -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* - -
-### Interface: \Consolidation\OutputFormatters\Formatters\RenderDataInterface - -| Visibility | Function | -|:-----------|:---------| -| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | - -
-### Class: \Consolidation\OutputFormatters\Formatters\SectionsFormatter - -> Display sections of data. This formatter takes data in the RowsOfFields data type. Each row represents one section; the data in each section is rendered in two columns, with the key in the first column and the value in the second column. - -| Visibility | Function | -|:-----------|:---------| -| public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return the list of data types acceptable to this formatter | -| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | -| public | validDataTypes() : void | -| public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | -| protected | renderEachCell(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | - -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* - -
### Class: \Consolidation\OutputFormatters\Formatters\SerializeFormatter > Serialize formatter Run provided date thruogh serialize. @@ -239,7 +237,8 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* -
+
+ ### Class: \Consolidation\OutputFormatters\Formatters\StringFormatter > String formatter This formatter is used as the default action when no particular formatter is requested. It will print the provided data only if it is a string; if any other type is given, then nothing is printed. @@ -254,7 +253,32 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Options\OverrideOptionsInterface](#interface-consolidationoutputformattersoptionsoverrideoptionsinterface)* -
+
+ +### Class: \Consolidation\OutputFormatters\Formatters\VarExportFormatter + +> Var_export formatter Run provided date thruogh var_export. + +| Visibility | Function | +|:-----------|:---------| +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | + +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* + +
+ +### Class: \Consolidation\OutputFormatters\Formatters\YamlFormatter + +> Yaml formatter Convert an array or ArrayObject into Yaml. + +| Visibility | Function | +|:-----------|:---------| +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | + +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* + +
+ ### Class: \Consolidation\OutputFormatters\Formatters\TableFormatter > Display a table of data with the Symfony Table class. This formatter takes data of either the RowsOfFields or PropertyList data type. Tables can be rendered with the rows running either vertically (the normal orientation) or horizontally. By default, associative lists will be displayed as two columns, with the key in the first column and the value in the second column. @@ -273,7 +297,44 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* -
+
+ +### Class: \Consolidation\OutputFormatters\Formatters\XmlFormatter + +> Display a table of data with the Symfony Table class. This formatter takes data of either the RowsOfFields or PropertyList data type. Tables can be rendered with the rows running either vertically (the normal orientation) or horizontally. By default, associative lists will be displayed as two columns, with the key in the first column and the value in the second column. + +| Visibility | Function | +|:-----------|:---------| +| public | __construct() : void | +| public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return the list of data types acceptable to this formatter | +| public | validDataTypes() : void | +| public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | + +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface)* + +
+ +### Class: \Consolidation\OutputFormatters\Formatters\PrintRFormatter + +> Print_r formatter Run provided date thruogh print_r. + +| Visibility | Function | +|:-----------|:---------| +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | + +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\Formatters\RenderDataInterface + +| Visibility | Function | +|:-----------|:---------| +| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | + +
+ ### Class: \Consolidation\OutputFormatters\Formatters\TsvFormatter > Tab-separated value formatters Display the provided structured data in a tab-separated list. Output escaping is much lighter, since there is no allowance for altering the delimiter. @@ -290,44 +351,16 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* -
-### Class: \Consolidation\OutputFormatters\Formatters\VarExportFormatter +
-> Var_export formatter Run provided date thruogh var_export. +### Interface: \Consolidation\OutputFormatters\Options\OverrideOptionsInterface | Visibility | Function | |:-----------|:---------| -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | +| public | overrideOptions(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions)
Allow the formatter to mess with the configuration options before any transformations et. al. get underway. | -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* +
-
-### Class: \Consolidation\OutputFormatters\Formatters\XmlFormatter - -> Display a table of data with the Symfony Table class. This formatter takes data of either the RowsOfFields or PropertyList data type. Tables can be rendered with the rows running either vertically (the normal orientation) or horizontally. By default, associative lists will be displayed as two columns, with the key in the first column and the value in the second column. - -| Visibility | Function | -|:-----------|:---------| -| public | __construct() : void | -| public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return the list of data types acceptable to this formatter | -| public | validDataTypes() : void | -| public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | - -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface)* - -
-### Class: \Consolidation\OutputFormatters\Formatters\YamlFormatter - -> Yaml formatter Convert an array or ArrayObject into Yaml. - -| Visibility | Function | -|:-----------|:---------| -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | - -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* - -
### Class: \Consolidation\OutputFormatters\Options\FormatterOptions > FormetterOptions holds information that affects the way a formatter renders its output. There are three places where a formatter might get options from: 1. Configuration associated with the command that produced the output. This is passed in to FormatterManager::write() along with the data to format. It might originally come from annotations on the command, or it might come from another source. Examples include the field labels for a table, or the default list of fields to display. 2. Options specified by the user, e.g. by commandline options. 3. Default values associated with the formatter itself. This class caches configuration from sources (1) and (2), and expects to be provided the defaults, (3), whenever a value is requested. @@ -347,9 +380,11 @@ | public | setConfigurationDefault(string $key, mixed $value) : \Consolidation\OutputFormatters\Options\FormetterOptions
Change one configuration value for this formatter option, but only if it does not already have a value set. | | public | setDefaultFields(mixed $fields) : void | | public | setDefaultStringField(mixed $defaultStringField) : void | +| public | setDelimiter(mixed $delimiter) : void | | public | setFieldLabels(mixed $fieldLabels) : void | | public | setIncludeFieldLables(mixed $includFieldLables) : void | | public | setInput(\Symfony\Component\Console\Input\InputInterface $input) : \Consolidation\OutputFormatters\Options\type
Provide a Symfony Console InputInterface containing the user-specified options for this request. | +| public | setListDelimiter(mixed $listDelimiter) : void | | public | setListOrientation(mixed $listOrientation) : void | | public | setOption(string $key, mixed $value) : [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions)
Change one option value specified by the user for this request. | | public | setOptions(array $options) : [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions)
Set all of the options that were specified by the user for this request. | @@ -363,14 +398,67 @@ | protected | parse(string $key, mixed $value) : mixed
Given the raw value for a specific key, do any type conversion (e.g. from a textual list to an array) needed for the data. | | protected | setConfigurationValue(string $key, mixed $value) : \Consolidation\OutputFormatters\Options\FormetterOptions
Change one configuration value for this formatter option. | -
-### Interface: \Consolidation\OutputFormatters\Options\OverrideOptionsInterface +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\ListDataInterface | Visibility | Function | |:-----------|:---------| -| public | overrideOptions(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions)
Allow the formatter to mess with the configuration options before any transformations et. al. get underway. | +| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : array
Convert data to a format suitable for use in a list. By default, the array values will be used. Implement ListDataInterface to use some other criteria (e.g. array keys). | + +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\TableDataInterface + +| Visibility | Function | +|:-----------|:---------| +| public | getOriginalData() : mixed
Return the original data for this table. Used by any formatter that is -not- a table. | +| public | getTableData(bool/boolean $includeRowKey=false) : array
Convert structured data into a form suitable for use by the table formatter. key from each row. | + +
+ +### Class: \Consolidation\OutputFormatters\StructuredData\HelpDocument + +| Visibility | Function | +|:-----------|:---------| +| public | getDomData() : [\DomDocument](http://php.net/manual/en/class.domdocument.php)
Convert data into a \DomDocument. | + +*This class implements [\Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface](#interface-consolidationoutputformattersstructureddataxmldomdatainterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\OriginalDataInterface + +| Visibility | Function | +|:-----------|:---------| +| public | getOriginalData() : mixed
Return the original data for this table. Used by any formatter that expects an array. | + +
+ +### Class: \Consolidation\OutputFormatters\StructuredData\RowsOfFields + +> Holds an array where each element of the array is one row, and each row contains an associative array where the keys are the field names, and the values are the field data. It is presumed that every row contains the same keys. + +| Visibility | Function | +|:-----------|:---------| +| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed | +| public | restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : \Consolidation\OutputFormatters\StructuredData\Consolidation\OutputFormatters\Transformations\TableTransformation
Restructure this data for output by converting it into a table transformation object. | +| protected | defaultOptions() : void | + +*This class extends [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract)* + +*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\RestructureInterface + +| Visibility | Function | +|:-----------|:---------| +| public | restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void
Allow structured data to be restructured -- i.e. to select fields to show, reorder fields, etc. | + +
-
### Class: \Consolidation\OutputFormatters\StructuredData\AbstractStructuredList (abstract) > Holds an array where each element of the array is one row, and each row contains an associative array where the keys are the field names, and the values are the field data. It is presumed that every row contains the same keys. @@ -380,7 +468,6 @@ | public | __construct(mixed $data) : void | | public | addRenderer([\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface) $renderer, string $priority=`'normal'`) : \Consolidation\OutputFormatters\StructuredData\$this
Add a renderer | | public | addRendererFunction(\callable $rendererFn, string $priority=`'normal'`) : \Consolidation\OutputFormatters\StructuredData\$this
Add a callable as a renderer | -| public | abstract getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed | | public | renderCell(mixed $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, mixed $rowData) : void | | public | abstract restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | | protected | createTableTransformation(mixed $data, mixed $options) : mixed | @@ -389,47 +476,27 @@ | protected | getReorderedFieldLabels(mixed $data, mixed $options, mixed $defaults) : mixed | | protected | instantiateTableTransformation(mixed $data, mixed $fieldLabels, mixed $rowLabels) : void | +*This class extends [\Consolidation\OutputFormatters\StructuredData\ListDataFromKeys](#class-consolidationoutputformattersstructureddatalistdatafromkeys)* + +*This class implements [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable, [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* + +
+ +### Class: \Consolidation\OutputFormatters\StructuredData\ListDataFromKeys + +> Represents aribtrary array data (structured or unstructured) where the data to display in --list format comes from the array keys. + +| Visibility | Function | +|:-----------|:---------| +| public | __construct(mixed $data) : void | +| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed | + *This class extends \ArrayObject* -*This class implements \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* +*This class implements \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface)* -
-### Class: \Consolidation\OutputFormatters\StructuredData\AssociativeList +
-> Old name for PropertyList class. - -| Visibility | Function | -|:-----------|:---------| - -*This class extends [\Consolidation\OutputFormatters\StructuredData\PropertyList](#class-consolidationoutputformattersstructureddatapropertylist)* - -*This class implements \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* - -
-### Class: \Consolidation\OutputFormatters\StructuredData\CallableRenderer - -| Visibility | Function | -|:-----------|:---------| -| public | __construct(\callable $renderFunction) : void | -| public | renderCell(mixed $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, mixed $rowData) : void | - -*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* - -
-### Interface: \Consolidation\OutputFormatters\StructuredData\ListDataInterface - -| Visibility | Function | -|:-----------|:---------| -| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : array
Convert data to a format suitable for use in a list. By default, the array values will be used. Implement ListDataInterface to use some other criteria (e.g. array keys). | - -
-### Interface: \Consolidation\OutputFormatters\StructuredData\OriginalDataInterface - -| Visibility | Function | -|:-----------|:---------| -| public | getOriginalData() : mixed
Return the original data for this table. Used by any formatter that expects an array. | - -
### Class: \Consolidation\OutputFormatters\StructuredData\PropertyList > Holds an array where each element of the array is one key : value pair. The keys must be unique, as is typically the case for associative arrays. @@ -443,9 +510,29 @@ *This class extends [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract)* -*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable* +*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\RenderCellInterface + +| Visibility | Function | +|:-----------|:---------| +| public | renderCell(string $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, array $rowData) : mixed
Convert the contents of one table cell into a string, so that it may be placed in the table. Renderer should return the $cellData passed to it if it does not wish to process it. | + +
+ +### Class: \Consolidation\OutputFormatters\StructuredData\CallableRenderer + +| Visibility | Function | +|:-----------|:---------| +| public | __construct(\callable $renderFunction) : void | +| public | renderCell(mixed $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, mixed $rowData) : void | + +*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* + +
-
### Interface: \Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface | Visibility | Function | @@ -454,51 +541,39 @@ *This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* -
-### Interface: \Consolidation\OutputFormatters\StructuredData\RenderCellInterface +
+ +### Class: \Consolidation\OutputFormatters\StructuredData\AssociativeList + +> Old name for PropertyList class. | Visibility | Function | |:-----------|:---------| -| public | renderCell(string $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, array $rowData) : mixed
Convert the contents of one table cell into a string, so that it may be placed in the table. Renderer should return the $cellData passed to it if it does not wish to process it. | -
-### Interface: \Consolidation\OutputFormatters\StructuredData\RestructureInterface +*This class extends [\Consolidation\OutputFormatters\StructuredData\PropertyList](#class-consolidationoutputformattersstructureddatapropertylist)* + +*This class implements [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable, [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface + +> When using arrays, we could represent XML data in a number of different ways. For example, given the following XML data strucutre: blah a b c This could be: [ 'id' => 1, 'name' => 'doc', 'foobars' => [ [ 'id' => '123', 'name' => 'blah', 'widgets' => [ [ 'foo' => 'a', 'bar' => 'b', 'baz' => 'c', ] ], ], ] ] The challenge is more in going from an array back to the more structured xml format. Note that any given key => string mapping could represent either an attribute, or a simple XML element containing only a string value. In general, we do *not* want to add extra layers of nesting in the data structure to disambiguate between these kinds of data, as we want the source data to render cleanly into other formats, e.g. yaml, json, et. al., and we do not want to force every data provider to have to consider the optimal xml schema for their data. Our strategy, therefore, is to expect clients that wish to provide a very specific xml representation to return a DOMDocument, and, for other data structures where xml is a secondary concern, then we will use some default heuristics to convert from arrays to xml. | Visibility | Function | |:-----------|:---------| -| public | restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void
Allow structured data to be restructured -- i.e. to select fields to show, reorder fields, etc. | +| public | arrayToXml(mixed $structuredData) : [\DOMDocument](http://php.net/manual/en/class.domdocument.php)
Convert data to a format suitable for use in a list. By default, the array values will be used. Implement ListDataInterface to use some other criteria (e.g. array keys). | -
-### Class: \Consolidation\OutputFormatters\StructuredData\RowsOfFields +
-> Holds an array where each element of the array is one row, and each row contains an associative array where the keys are the field names, and the values are the field data. It is presumed that every row contains the same keys. - -| Visibility | Function | -|:-----------|:---------| -| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed | -| public | restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : \Consolidation\OutputFormatters\StructuredData\Consolidation\OutputFormatters\Transformations\TableTransformation
Restructure this data for output by converting it into a table transformation object. | -| protected | defaultOptions() : void | - -*This class extends [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract)* - -*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable* - -
-### Interface: \Consolidation\OutputFormatters\StructuredData\TableDataInterface - -| Visibility | Function | -|:-----------|:---------| -| public | getOriginalData() : mixed
Return the original data for this table. Used by any formatter that is -not- a table. | -| public | getTableData(bool/boolean $includeRowKey=false) : array
Convert structured data into a form suitable for use by the table formatter. key from each row. | - -
### Interface: \Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface | Visibility | Function | |:-----------|:---------| | public | getDomData() : [\DomDocument](http://php.net/manual/en/class.domdocument.php)
Convert data into a \DomDocument. | -
+
+ ### Class: \Consolidation\OutputFormatters\StructuredData\Xml\XmlSchema | Visibility | Function | @@ -508,6 +583,7 @@ | protected | addXmlChildren([\DOMDocument](http://php.net/manual/en/class.domdocument.php) $dom, mixed $xmlParent, mixed $elementName, mixed $structuredData) : void | | protected | addXmlData([\DOMDocument](http://php.net/manual/en/class.domdocument.php) $dom, mixed $xmlParent, mixed $elementName, mixed $structuredData) : void | | protected | addXmlDataOrAttribute([\DOMDocument](http://php.net/manual/en/class.domdocument.php) $dom, mixed $xmlParent, mixed $elementName, mixed $key, mixed $value) : void | +| protected | determineElementName(mixed $key, mixed $childElementName, mixed $value) : void | | protected | getDefaultElementName(mixed $parentElementName) : mixed | | protected | getTopLevelElementName(mixed $structuredData) : mixed | | protected | inElementList(mixed $parentElementName, mixed $elementName) : void | @@ -517,44 +593,18 @@ *This class implements [\Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface](#interface-consolidationoutputformattersstructureddataxmlxmlschemainterface)* -
-### Interface: \Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface +
-> When using arrays, we could represent XML data in a number of different ways. For example, given the following XML data strucutre: blah a b c This could be: [ 'id' => 1, 'name' => 'doc', 'foobars' => [ [ 'id' => '123', 'name' => 'blah', 'widgets' => [ [ 'foo' => 'a', 'bar' => 'b', 'baz' => 'c', ] ], ], ] ] The challenge is more in going from an array back to the more structured xml format. Note that any given key => string mapping could represent either an attribute, or a simple XML element containing only a string value. In general, we do *not* want to add extra layers of nesting in the data structure to disambiguate between these kinds of data, as we want the source data to render cleanly into other formats, e.g. yaml, json, et. al., and we do not want to force every data provider to have to consider the optimal xml schema for their data. Our strategy, therefore, is to expect clients that wish to provide a very specific xml representation to return a DOMDocument, and, for other data structures where xml is a secondary concern, then we will use some default heuristics to convert from arrays to xml. +### Class: \Consolidation\OutputFormatters\Transformations\PropertyParser + +> Transform a string of properties into a PHP associative array. Input: one: red two: white three: blue Output: [ 'one' => 'red', 'two' => 'white', 'three' => 'blue', ] | Visibility | Function | |:-----------|:---------| -| public | arrayToXml(mixed $structuredData) : [\DOMDocument](http://php.net/manual/en/class.domdocument.php)
Convert data to a format suitable for use in a list. By default, the array values will be used. Implement ListDataInterface to use some other criteria (e.g. array keys). | +| public static | parse(mixed $data) : void | -
-### Class: \Consolidation\OutputFormatters\Transformations\DomToArraySimplifier +
-> Simplify a DOMDocument to an array. - -| Visibility | Function | -|:-----------|:---------| -| public | __construct() : void | -| public | canSimplify([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool | -| public | simplifyToArray(mixed $structuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | -| protected | elementToArray([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Recursively convert the provided DOM element into a php array. | -| protected | getNodeAttributes([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get all of the attributes of the provided element. | -| protected | getNodeChildren([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get all of the children of the provided element, with simplification. | -| protected | getNodeChildrenData([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get the data from the children of the provided node in preliminary form. | -| protected | getUniformChildren(string $parentKey, [\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Convert the children of the provided DOM element into an array. Here, 'uniform' means that all of the element names of the children are identical, and further, the element name of the parent is the plural form of the child names. When the children are uniform in this way, then the parent element name will be used as the key to store the children in, and the child list will be returned as a simple list with their (duplicate) element names omitted. | -| protected | getUniqueChildren(string $parentKey, [\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Convert the children of the provided DOM element into an array. Here, 'unique' means that all of the element names of the children are different. Since the element names will become the key of the associative array that is returned, so duplicates are not supported. If there are any duplicates, then an exception will be thrown. | -| protected | hasUniformChildren([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : boolean
Determine whether the children of the provided element are uniform. | -| protected | valueCanBeSimplified([\DOMNode](http://php.net/manual/en/class.domnode.php) $value) : boolean
Determine whether the provided value has additional unnecessary nesting. {"color": "red"} is converted to "red". No other simplification is done. | - -*This class implements [\Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface](#interface-consolidationoutputformatterstransformationssimplifytoarrayinterface)* - -
-### Interface: \Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface - -| Visibility | Function | -|:-----------|:---------| -| public | overrideRestructure(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Select data to use directly from the structured output, before the restructure operation has been executed. | - -
### Class: \Consolidation\OutputFormatters\Transformations\PropertyListTableTransformation | Visibility | Function | @@ -565,38 +615,8 @@ *This class implements [\Consolidation\OutputFormatters\StructuredData\OriginalDataInterface](#interface-consolidationoutputformattersstructureddataoriginaldatainterface), [\Consolidation\OutputFormatters\StructuredData\TableDataInterface](#interface-consolidationoutputformattersstructureddatatabledatainterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable* -
-### Class: \Consolidation\OutputFormatters\Transformations\PropertyParser +
-> Transform a string of properties into a PHP associative array. Input: one: red two: white three: blue Output: [ 'one' => 'red', 'two' => 'white', 'three' => 'blue', ] - -| Visibility | Function | -|:-----------|:---------| -| public static | parse(mixed $data) : void | - -
-### Class: \Consolidation\OutputFormatters\Transformations\ReorderFields - -> Reorder the field labels based on the user-selected fields to display. - -| Visibility | Function | -|:-----------|:---------| -| public | reorder(string/array $fields, array $fieldLabels, array $data) : array
Given a simple list of user-supplied field keys or field labels, return a reordered version of the field labels matching the user selection. key to the field label | -| protected | convertToRegex(mixed $str) : void
Convert the provided string into a regex suitable for use in preg_match. Matching occurs in the same way as the Symfony Finder component: http://symfony.com/doc/current/components/finder.html#file-name | -| protected | getSelectedFieldKeys(mixed $fields, mixed $fieldLabels) : mixed | -| protected | isRegex(string $str) : bool Whether the given string is a regex
Checks whether the string is a regex. This function is copied from MultiplePcreFilterIterator in the Symfony Finder component. | -| protected | matchFieldInLabelMap(mixed $field, mixed $fieldLabels) : void | -| protected | reorderFieldLabels(mixed $fields, mixed $fieldLabels, mixed $data) : void | - -
-### Interface: \Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface - -| Visibility | Function | -|:-----------|:---------| -| public | canSimplify([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $structuredOutput) : bool
Indicate whether or not the given data type can be simplified to an array | -| public | simplifyToArray(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : array
Convert structured data into a generic array, usable by generic array-based formatters. Objects that implement this interface may be attached to the FormatterManager, and will be used on any data structure that needs to be simplified into an array. An array simplifier should take no action other than to return its input data if it cannot simplify the provided data into an array. | - -
### Class: \Consolidation\OutputFormatters\Transformations\TableTransformation | Visibility | Function | @@ -620,22 +640,124 @@ *This class implements \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\TableDataInterface](#interface-consolidationoutputformattersstructureddatatabledatainterface), [\Consolidation\OutputFormatters\StructuredData\OriginalDataInterface](#interface-consolidationoutputformattersstructureddataoriginaldatainterface)* -
+
+ +### Class: \Consolidation\OutputFormatters\Transformations\ReorderFields + +> Reorder the field labels based on the user-selected fields to display. + +| Visibility | Function | +|:-----------|:---------| +| public | reorder(string/array $fields, array $fieldLabels, array $data) : array
Given a simple list of user-supplied field keys or field labels, return a reordered version of the field labels matching the user selection. key to the field label | +| protected | convertToRegex(mixed $str) : void
Convert the provided string into a regex suitable for use in preg_match. Matching occurs in the same way as the Symfony Finder component: http://symfony.com/doc/current/components/finder.html#file-name | +| protected | getSelectedFieldKeys(mixed $fields, mixed $fieldLabels) : mixed | +| protected | isRegex(string $str) : bool Whether the given string is a regex
Checks whether the string is a regex. This function is copied from MultiplePcreFilterIterator in the Symfony Finder component. | +| protected | matchFieldInLabelMap(mixed $field, mixed $fieldLabels) : void | +| protected | reorderFieldLabels(mixed $fields, mixed $fieldLabels, mixed $data) : void | + +
+ +### Class: \Consolidation\OutputFormatters\Transformations\DomToArraySimplifier + +> Simplify a DOMDocument to an array. + +| Visibility | Function | +|:-----------|:---------| +| public | __construct() : void | +| public | canSimplify([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool | +| public | simplifyToArray(mixed $structuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | +| protected | elementToArray([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Recursively convert the provided DOM element into a php array. | +| protected | getIdOfValue(mixed $value) : string
If the object has an 'id' or 'name' element, then use that as the array key when storing this value in its parent. | +| protected | getNodeAttributes([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get all of the attributes of the provided element. | +| protected | getNodeChildren([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get all of the children of the provided element, with simplification. | +| protected | getNodeChildrenData([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get the data from the children of the provided node in preliminary form. | +| protected | getUniformChildren(string $parentKey, [\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Convert the children of the provided DOM element into an array. Here, 'uniform' means that all of the element names of the children are identical, and further, the element name of the parent is the plural form of the child names. When the children are uniform in this way, then the parent element name will be used as the key to store the children in, and the child list will be returned as a simple list with their (duplicate) element names omitted. | +| protected | getUniqueChildren(string $parentKey, [\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Convert the children of the provided DOM element into an array. Here, 'unique' means that all of the element names of the children are different. Since the element names will become the key of the associative array that is returned, so duplicates are not supported. If there are any duplicates, then an exception will be thrown. | +| protected | hasUniformChildren([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : boolean
Determine whether the children of the provided element are uniform. | +| protected | valueCanBeSimplified([\DOMNode](http://php.net/manual/en/class.domnode.php) $value) : boolean
Determine whether the provided value has additional unnecessary nesting. {"color": "red"} is converted to "red". No other simplification is done. | + +*This class implements [\Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface](#interface-consolidationoutputformatterstransformationssimplifytoarrayinterface)* + +
+ ### Class: \Consolidation\OutputFormatters\Transformations\WordWrapper | Visibility | Function | |:-----------|:---------| | public | __construct(mixed $width) : void | +| public | minimumWidth(mixed $colkey, mixed $width) : void
Set the minimum width of just one column | | public | setMinimumWidths(array $minimumWidths) : void
If columns have minimum widths, then set them here. | | public | setPaddingFromStyle(\Symfony\Component\Console\Helper\TableStyle $style) : void
Calculate our padding widths from the specified table style. | | public | wrap(array $rows, array $widths=array()) : array
Wrap the cells in each part of the provided data table | -| protected | columnAutowidth(array $rows, array $widths) : void
Determine the best fit for column widths. Ported from Drush. (in characters) - these will be left as is. | -| protected static | longestWordLength(string $str) : int
Return the length of the longest word in the string. | -| protected | selectColumnToReduce(mixed $col_dist, mixed $auto_widths, mixed $max_word_lens) : void | -| protected | shouldSelectThisColumn(mixed $count, mixed $counts, mixed $width) : bool | +| protected | calculateWidths(mixed $rows, array $widths=array()) : void
Determine what widths we'll use for wrapping. | | protected | wrapCell(mixed $cell, string $cellWidth) : mixed
Wrap one cell. Guard against modifying non-strings and then call through to wordwrap(). | -
+
+ +### Interface: \Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface + +| Visibility | Function | +|:-----------|:---------| +| public | overrideRestructure(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Select data to use directly from the structured output, before the restructure operation has been executed. | + +
+ +### Interface: \Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface + +| Visibility | Function | +|:-----------|:---------| +| public | canSimplify([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $structuredOutput) : bool
Indicate whether or not the given data type can be simplified to an array | +| public | simplifyToArray(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : array
Convert structured data into a generic array, usable by generic array-based formatters. Objects that implement this interface may be attached to the FormatterManager, and will be used on any data structure that needs to be simplified into an array. An array simplifier should take no action other than to return its input data if it cannot simplify the provided data into an array. | + +
+ +### Class: \Consolidation\OutputFormatters\Transformations\Wrap\CalculateWidths + +> Calculate column widths for table cells. Influenced by Drush and webmozart/console. + +| Visibility | Function | +|:-----------|:---------| +| public | __construct() : void | +| public | calculate(mixed $availableWidth, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $dataWidths, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $minimumWidths) : void
Given the total amount of available space, and the width of the columns to place, calculate the optimum column widths to use. | +| public | calculateLongestCell(mixed $rows) : void
Calculate the longest cell data from any row of each of the cells. | +| public | calculateLongestWord(mixed $rows) : void
Calculate the longest word and longest line in the provided data. | +| public | distributeLongColumns(mixed $availableWidth, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $dataWidths, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $minimumWidths) : void
Distribute the remainig space among the columns that were not included in the list of "short" columns. | +| public | getShortColumns(mixed $availableWidth, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $dataWidths, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $minimumWidths) : mixed
Return all of the columns whose longest line length is less than or equal to the average width. | +| protected | calculateColumnWidths(mixed $rows, \callable $fn) : void | +| protected static | longestWordLength(string $str) : int
Return the length of the longest word in the string. | + +
+ +### Class: \Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths + +> Calculate the width of data in table cells in preparation for word wrapping. + +| Visibility | Function | +|:-----------|:---------| +| public | __construct(array $widths=array()) : void | +| public | adjustMinimumWidths(mixed $availableWidth, mixed $dataCellWidths) : void
If the widths specified by this object do not fit within the provided avaiable width, then reduce them all proportionally. | +| public | averageWidth(mixed $availableWidth) : void
Calculate how much space is available on average for all columns. | +| public | combine([\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $combineWith) : void
Combine this set of widths with another set, and return a new set that contains the entries from both. | +| public | count() : void
Return the number of columns. | +| public | distribute(mixed $availableWidth) : void
Return proportional weights | +| public | enforceMinimums(mixed $minimumWidths) : void
Ensure that every item in $widths that has a corresponding entry in $minimumWidths is as least as large as the minimum value held there. | +| public | findShortColumns(mixed $thresholdWidth) : mixed
Find all of the columns that are shorter than the specified threshold. | +| public | findUndersizedColumns(mixed $minimumWidths) : mixed
Find all of the columns that are shorter than the corresponding minimum widths. | +| public | isEmpty() : bool
Return true if there is no data in this object | +| public | keys() : void
Return the available keys (column identifiers) from the calculated data set. | +| public | lastColumn() : void | +| public | paddingSpace(mixed $paddingInEachCell, mixed $extraPaddingAtEndOfLine, mixed $extraPaddingAtBeginningOfLine) : void | +| public | removeColumns(mixed $columnKeys) : void
Remove all of the specified columns from this data structure. | +| public | selectColumns(mixed $columnKeys) : void
Select all columns that exist in the provided list of keys. | +| public | setWidth(mixed $key, mixed $width) : void
Set the length of the specified column. | +| public static | sumWidth(mixed $widths) : void
Return the sum of the lengths of the provided widths. | +| public | totalWidth() : void
Return the sum of the lengths of the provided widths. | +| public | width(mixed $key) : void
Return the length of the specified column. | +| public | widths() : void
Return all of the lengths | +| protected | findColumnsUnderThreshold(array $thresholdWidths) : mixed | + +
+ ### Interface: \Consolidation\OutputFormatters\Validate\ValidationInterface > Formatters may implement ValidationInterface in order to indicate whether a particular data structure is supported. Any formatter that does not implement ValidationInterface is assumed to only operate on arrays, or data types that implement SimplifyToArrayInterface. @@ -645,7 +767,8 @@ | public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return true if the specified format is valid for use with this formatter. | | public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | -
+
+ ### Interface: \Consolidation\OutputFormatters\Validate\ValidDataTypesInterface > Formatters may implement ValidDataTypesInterface in order to indicate exactly which formats they support. The validDataTypes method can be called to retrieve a list of data types useful in providing hints in exception messages about which data types can be used with the formatter. Note that it is OPTIONAL for formatters to implement this interface. If a formatter implements only ValidationInterface, then clients that request the formatter via FormatterManager::write() will still get a list (via an InvalidFormatException) of all of the formats that are usable with the provided data type. Implementing ValidDataTypesInterface is benefitial to clients who instantiate a formatter directly (via `new`). Formatters that implement ValidDataTypesInterface may wish to use ValidDataTypesTrait. diff --git a/lib/composer/vendor/consolidation/output-formatters/src/FormatterManager.php b/lib/composer/vendor/consolidation/output-formatters/src/FormatterManager.php index 7d89d3f8..0f858ced 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/FormatterManager.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/FormatterManager.php @@ -112,14 +112,14 @@ class FormatterManager if (count($validFormats) > 1) { // Make an input option for --format $description = 'Format the result data. Available formats: ' . implode(',', $validFormats); - $automaticOptions[FormatterOptions::FORMAT] = new InputOption(FormatterOptions::FORMAT, '', InputOption::VALUE_OPTIONAL, $description, $defaultFormat); + $automaticOptions[FormatterOptions::FORMAT] = new InputOption(FormatterOptions::FORMAT, '', InputOption::VALUE_REQUIRED, $description, $defaultFormat); } if ($availableFields) { $defaultFields = $options->get(FormatterOptions::DEFAULT_FIELDS, [], ''); $description = 'Available fields: ' . implode(', ', $this->availableFieldsList($availableFields)); - $automaticOptions[FormatterOptions::FIELDS] = new InputOption(FormatterOptions::FIELDS, '', InputOption::VALUE_OPTIONAL, $description, $defaultFields); - $automaticOptions[FormatterOptions::FIELD] = new InputOption(FormatterOptions::FIELD, '', InputOption::VALUE_OPTIONAL, "Select just one field, and force format to 'string'.", ''); + $automaticOptions[FormatterOptions::FIELDS] = new InputOption(FormatterOptions::FIELDS, '', InputOption::VALUE_REQUIRED, $description, $defaultFields); + $automaticOptions[FormatterOptions::FIELD] = new InputOption(FormatterOptions::FIELD, '', InputOption::VALUE_REQUIRED, "Select just one field, and force format to 'string'.", ''); } return $automaticOptions; diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Formatters/TableFormatter.php b/lib/composer/vendor/consolidation/output-formatters/src/Formatters/TableFormatter.php index f7787c28..a467576b 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Formatters/TableFormatter.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Formatters/TableFormatter.php @@ -80,11 +80,26 @@ class TableFormatter implements FormatterInterface, ValidDataTypesInterface, Ren $table->setStyle($options->get(FormatterOptions::TABLE_STYLE, $defaults)); $isList = $tableTransformer->isList(); $includeHeaders = $options->get(FormatterOptions::INCLUDE_FIELD_LABELS, $defaults); + $listDelimiter = $options->get(FormatterOptions::LIST_DELIMITER, $defaults); + + $headers = $tableTransformer->getHeaders(); + $data = $tableTransformer->getTableData($includeHeaders && $isList); + + if ($listDelimiter) { + if (!empty($headers)) { + array_splice($headers, 1, 0, ':'); + } + $data = array_map(function ($item) { + array_splice($item, 1, 0, ':'); + return $item; + }, $data); + } + if ($includeHeaders && !$isList) { - $headers = $tableTransformer->getHeaders(); $table->setHeaders($headers); } - $data = $tableTransformer->getTableData($includeHeaders && $isList); + + // todo: $output->getFormatter(); $data = $this->wrap($headers, $data, $table->getStyle(), $options); $table->setRows($data); $table->render(); diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Formatters/XmlFormatter.php b/lib/composer/vendor/consolidation/output-formatters/src/Formatters/XmlFormatter.php index 05533f22..85b4e37e 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Formatters/XmlFormatter.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Formatters/XmlFormatter.php @@ -51,6 +51,9 @@ class XmlFormatter implements FormatterInterface, ValidDataTypesInterface if ($structuredData instanceof DomDataInterface) { return $structuredData->getDomData(); } + if ($structuredData instanceof \ArrayObject) { + return $structuredData->getArrayCopy(); + } if (!is_array($structuredData)) { throw new IncompatibleDataException( $this, diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Options/FormatterOptions.php b/lib/composer/vendor/consolidation/output-formatters/src/Options/FormatterOptions.php index 1f71cb02..292a119a 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Options/FormatterOptions.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Options/FormatterOptions.php @@ -46,6 +46,7 @@ class FormatterOptions const DEFAULT_FIELDS = 'default-fields'; const DEFAULT_STRING_FIELD = 'default-string-field'; const DELIMITER = 'delimiter'; + const LIST_DELIMITER = 'list-delimiter'; const TERMINAL_WIDTH = 'width'; /** @@ -83,6 +84,18 @@ class FormatterOptions return $this->setConfigurationValue(self::TABLE_STYLE, $style); } + public function setDelimiter($delimiter) + { + return $this->setConfigurationValue(self::DELIMITER, $delimiter); + } + + public function setListDelimiter($listDelimiter) + { + return $this->setConfigurationValue(self::LIST_DELIMITER, $listDelimiter); + } + + + public function setIncludeFieldLables($includFieldLables) { return $this->setConfigurationValue(self::INCLUDE_FIELD_LABELS, $includFieldLables); diff --git a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/AbstractStructuredList.php b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/AbstractStructuredList.php index fb1bc537..ee09a5a4 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/AbstractStructuredList.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/AbstractStructuredList.php @@ -14,10 +14,9 @@ use Consolidation\OutputFormatters\Transformations\TableTransformation; * * It is presumed that every row contains the same keys. */ -abstract class AbstractStructuredList extends \ArrayObject implements RestructureInterface, ListDataInterface, RenderCellCollectionInterface +abstract class AbstractStructuredList extends ListDataFromKeys implements RestructureInterface, RenderCellCollectionInterface { use RenderCellCollectionTrait; - protected $data; public function __construct($data) { @@ -26,8 +25,6 @@ abstract class AbstractStructuredList extends \ArrayObject implements Restructur abstract public function restructure(FormatterOptions $options); - abstract public function getListData(FormatterOptions $options); - protected function createTableTransformation($data, $options) { $defaults = $this->defaultOptions(); diff --git a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/HelpDocument.php b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/HelpDocument.php new file mode 100644 index 00000000..88c59f9a --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/HelpDocument.php @@ -0,0 +1,16 @@ +getArrayCopy()); + } +} diff --git a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/Xml/XmlSchema.php b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/Xml/XmlSchema.php index 04aecf90..9e4a15b1 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/Xml/XmlSchema.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/Xml/XmlSchema.php @@ -44,7 +44,7 @@ class XmlSchema implements XmlSchemaInterface protected function addXmlDataOrAttribute(\DOMDocument $dom, $xmlParent, $elementName, $key, $value) { $childElementName = $this->getDefaultElementName($elementName); - $elementName = is_numeric($key) ? $childElementName : $key; + $elementName = $this->determineElementName($key, $childElementName, $value); if (($elementName != $childElementName) && $this->isAttribute($elementName, $key, $value)) { $xmlParent->setAttribute($key, $value); return; @@ -52,6 +52,26 @@ class XmlSchema implements XmlSchemaInterface $this->addXmlData($dom, $xmlParent, $elementName, $value); } + protected function determineElementName($key, $childElementName, $value) + { + if (is_numeric($key)) { + return $childElementName; + } + if (is_object($value)) { + $value = (array)$value; + } + if (!is_array($value)) { + return $key; + } + if (array_key_exists('id', $value) && ($value['id'] == $key)) { + return $childElementName; + } + if (array_key_exists('name', $value) && ($value['name'] == $key)) { + return $childElementName; + } + return $key; + } + protected function getTopLevelElementName($structuredData) { return 'document'; diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/DomToArraySimplifier.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/DomToArraySimplifier.php index a9e28cfb..e7a6c879 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/DomToArraySimplifier.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/DomToArraySimplifier.php @@ -85,12 +85,13 @@ class DomToArraySimplifier implements SimplifyToArrayInterface return []; } $uniformChildrenName = $this->hasUniformChildren($element); - if ("{$uniformChildrenName}s" == $element->nodeName) { + // Check for plurals. + if (in_array($element->nodeName, ["{$uniformChildrenName}s", "{$uniformChildrenName}es"])) { $result = $this->getUniformChildren($element->nodeName, $element); } else { $result = $this->getUniqueChildren($element->nodeName, $element); } - return $result; + return array_filter($result); } /** @@ -153,7 +154,12 @@ class DomToArraySimplifier implements SimplifyToArrayInterface if ($this->valueCanBeSimplified($value)) { $value = array_shift($value); } - $simplifiedChildren[$parentKey][] = $value; + $id = $this->getIdOfValue($value); + if ($id) { + $simplifiedChildren[$parentKey][$id] = $value; + } else { + $simplifiedChildren[$parentKey][] = $value; + } } return $simplifiedChildren; } @@ -178,6 +184,25 @@ class DomToArraySimplifier implements SimplifyToArrayInterface return is_string($data); } + /** + * If the object has an 'id' or 'name' element, then use that + * as the array key when storing this value in its parent. + * @param mixed $value + * @return string + */ + protected function getIdOfValue($value) + { + if (!is_array($value)) { + return false; + } + if (array_key_exists('id', $value)) { + return trim($value['id'], '-'); + } + if (array_key_exists('name', $value)) { + return trim($value['name'], '-'); + } + } + /** * Convert the children of the provided DOM element into an array. * Here, 'unique' means that all of the element names of the children are diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/PropertyParser.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/PropertyParser.php index 18b982ea..ec1616af 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/PropertyParser.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/PropertyParser.php @@ -29,7 +29,9 @@ class PropertyParser $lines = explode("\n", $data); foreach ($lines as $line) { list($key, $value) = explode(':', trim($line), 2) + ['', '']; - $result[$key] = trim($value); + if (!empty($key) && !empty($value)) { + $result[$key] = trim($value); + } } return $result; } diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/ReorderFields.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/ReorderFields.php index 9e764dc3..ca1ee7c3 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/ReorderFields.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/ReorderFields.php @@ -42,6 +42,9 @@ class ReorderFields { $result = []; $firstRow = reset($data); + if (!$firstRow) { + $firstRow = $fieldLabels; + } foreach ($fields as $field) { if (array_key_exists($field, $firstRow)) { if (array_key_exists($field, $fieldLabels)) { diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/WordWrapper.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/WordWrapper.php index 18519d07..36f9b88d 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/WordWrapper.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/WordWrapper.php @@ -1,12 +1,14 @@ width = $width; + $this->minimumWidths = new ColumnWidths(); } /** @@ -40,7 +43,15 @@ class WordWrapper */ public function setMinimumWidths($minimumWidths) { - $this->minimumWidths = $minimumWidths; + $this->minimumWidths = new ColumnWidths($minimumWidths); + } + + /** + * Set the minimum width of just one column + */ + public function minimumWidth($colkey, $width) + { + $this->minimumWidths->setWidth($colkey, $width); } /** @@ -50,25 +61,49 @@ class WordWrapper */ public function wrap($rows, $widths = []) { - // If the width was not set, then disable wordwrap. - if (!$this->width) { + $auto_widths = $this->calculateWidths($rows, $widths); + + // If no widths were provided, then disable wrapping + if ($auto_widths->isEmpty()) { return $rows; } - // Calculate the column widths to use based on the content. - $auto_widths = $this->columnAutowidth($rows, $widths); - // Do wordwrap on all cells. $newrows = array(); foreach ($rows as $rowkey => $row) { foreach ($row as $colkey => $cell) { - $newrows[$rowkey][$colkey] = $this->wrapCell($cell, $auto_widths[$colkey]); + $newrows[$rowkey][$colkey] = $this->wrapCell($cell, $auto_widths->width($colkey)); } } return $newrows; } + /** + * Determine what widths we'll use for wrapping. + */ + protected function calculateWidths($rows, $widths = []) + { + // Widths must be provided in some form or another, or we won't wrap. + if (empty($widths) && !$this->width) { + return new ColumnWidths(); + } + + // Technically, `$widths`, if provided here, should be used + // as the exact widths to wrap to. For now we'll just treat + // these as minimum widths + $minimumWidths = $this->minimumWidths->combine(new ColumnWidths($widths)); + + $calculator = new CalculateWidths(); + $dataCellWidths = $calculator->calculateLongestCell($rows); + + $availableWidth = $this->width - $dataCellWidths->paddingSpace($this->paddingInEachCell, $this->extraPaddingAtEndOfLine, $this->extraPaddingAtBeginningOfLine); + + $this->minimumWidths->adjustMinimumWidths($availableWidth, $dataCellWidths); + + return $calculator->calculate($availableWidth, $dataCellWidths, $minimumWidths); + } + /** * Wrap one cell. Guard against modifying non-strings and * then call through to wordwrap(). @@ -84,144 +119,4 @@ class WordWrapper } return wordwrap($cell, $cellWidth, "\n", true); } - - /** - * Determine the best fit for column widths. Ported from Drush. - * - * @param array $rows The rows to use for calculations. - * @param array $widths Manually specified widths of each column - * (in characters) - these will be left as is. - */ - protected function columnAutowidth($rows, $widths) - { - $auto_widths = $widths; - - // First we determine the distribution of row lengths in each column. - // This is an array of descending character length keys (i.e. starting at - // the rightmost character column), with the value indicating the number - // of rows where that character column is present. - $col_dist = []; - // We will also calculate the longest word in each column - $max_word_lens = []; - foreach ($rows as $rowkey => $row) { - foreach ($row as $col_id => $cell) { - $longest_word_len = static::longestWordLength($cell); - if ((!isset($max_word_lens[$col_id]) || ($max_word_lens[$col_id] < $longest_word_len))) { - $max_word_lens[$col_id] = $longest_word_len; - } - if (empty($widths[$col_id])) { - $length = strlen($cell); - if ($length == 0) { - $col_dist[$col_id][0] = 0; - } - while ($length > 0) { - if (!isset($col_dist[$col_id][$length])) { - $col_dist[$col_id][$length] = 0; - } - $col_dist[$col_id][$length]++; - $length--; - } - } - } - } - - foreach ($col_dist as $col_id => $count) { - // Sort the distribution in decending key order. - krsort($col_dist[$col_id]); - // Initially we set all columns to their "ideal" longest width - // - i.e. the width of their longest column. - $auto_widths[$col_id] = max(array_keys($col_dist[$col_id])); - } - - // We determine what width we have available to use, and what width the - // above "ideal" columns take up. - $available_width = $this->width - ($this->extraPaddingAtBeginningOfLine + $this->extraPaddingAtEndOfLine + (count($auto_widths) * $this->paddingInEachCell)); - $auto_width_current = array_sum($auto_widths); - - // If we cannot fit into the minimum width anyway, then just return - // the max word length of each column as the 'ideal' - $minimumIdealLength = array_sum($this->minimumWidths); - if ($minimumIdealLength && ($available_width < $minimumIdealLength)) { - return $max_word_lens; - } - - // If we need to reduce a column so that we can fit the space we use this - // loop to figure out which column will cause the "least wrapping", - // (relative to the other columns) and reduce the width of that column. - while ($auto_width_current > $available_width) { - list($column, $width) = $this->selectColumnToReduce($col_dist, $auto_widths, $max_word_lens); - - if (!$column || $width <= 1) { - // If we have reached a width of 1 then give up, so wordwrap can still progress. - break; - } - // Reduce the width of the selected column. - $auto_widths[$column]--; - // Reduce our overall table width counter. - $auto_width_current--; - // Remove the corresponding data from the disctribution, so next time - // around we use the data for the row to the left. - unset($col_dist[$column][$width]); - } - return $auto_widths; - } - - protected function selectColumnToReduce($col_dist, $auto_widths, $max_word_lens) - { - $column = false; - $count = 0; - $width = 0; - foreach ($col_dist as $col_id => $counts) { - // Of the columns whose length is still > than the the lenght - // of their maximum word length - if ($auto_widths[$col_id] > $max_word_lens[$col_id]) { - if ($this->shouldSelectThisColumn($count, $counts, $width)) { - $column = $col_id; - $count = current($counts); - $width = key($counts); - } - } - } - if ($column !== false) { - return [$column, $width]; - } - foreach ($col_dist as $col_id => $counts) { - if (empty($this->minimumWidths) || ($auto_widths[$col_id] > $this->minimumWidths[$col_id])) { - if ($this->shouldSelectThisColumn($count, $counts, $width)) { - $column = $col_id; - $count = current($counts); - $width = key($counts); - } - } - } - return [$column, $width]; - } - - protected function shouldSelectThisColumn($count, $counts, $width) - { - return - // If we are just starting out, select the first column. - ($count == 0) || - // OR: if this column would cause less wrapping than the currently - // selected column, then select it. - (current($counts) < $count) || - // OR: if this column would cause the same amount of wrapping, but is - // longer, then we choose to wrap the longer column (proportionally - // less wrapping, and helps avoid triple line wraps). - (current($counts) == $count && key($counts) > $width); - } - - /** - * Return the length of the longest word in the string. - * @param string $str - * @return int - */ - protected static function longestWordLength($str) - { - $words = preg_split('/[ -]/', $str); - $lengths = array_map(function ($s) { - return strlen($s); - }, $words); - return max($lengths); - } } diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/CalculateWidths.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/CalculateWidths.php new file mode 100644 index 00000000..04af0920 --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/CalculateWidths.php @@ -0,0 +1,141 @@ +totalWidth() <= $availableWidth) { + return $dataWidths->enforceMinimums($minimumWidths); + } + + // Get the short columns first. If there are none, then distribute all + // of the available width among the remaining columns. + $shortColWidths = $this->getShortColumns($availableWidth, $dataWidths, $minimumWidths); + if ($shortColWidths->isEmpty()) { + return $this->distributeLongColumns($availableWidth, $dataWidths, $minimumWidths); + } + + // If some short columns were removed, then account for the length + // of the removed columns and make a recursive call (since the average + // width may be higher now, if the removed columns were shorter in + // length than the previous average). + $availableWidth -= $shortColWidths->totalWidth(); + $remainingWidths = $dataWidths->removeColumns($shortColWidths->keys()); + $remainingColWidths = $this->calculate($availableWidth, $remainingWidths, $minimumWidths); + + return $shortColWidths->combine($remainingColWidths); + } + + /** + * Calculate the longest cell data from any row of each of the cells. + */ + public function calculateLongestCell($rows) + { + return $this->calculateColumnWidths( + $rows, + function ($cell) { + return strlen($cell); + } + ); + } + + /** + * Calculate the longest word and longest line in the provided data. + */ + public function calculateLongestWord($rows) + { + return $this->calculateColumnWidths( + $rows, + function ($cell) { + return static::longestWordLength($cell); + } + ); + } + + protected function calculateColumnWidths($rows, callable $fn) + { + $widths = []; + + // Examine each row and find the longest line length and longest + // word in each column. + foreach ($rows as $rowkey => $row) { + foreach ($row as $colkey => $cell) { + $value = $fn($cell); + if ((!isset($widths[$colkey]) || ($widths[$colkey] < $value))) { + $widths[$colkey] = $value; + } + } + } + + return new ColumnWidths($widths); + } + + /** + * Return all of the columns whose longest line length is less than or + * equal to the average width. + */ + public function getShortColumns($availableWidth, ColumnWidths $dataWidths, ColumnWidths $minimumWidths) + { + $averageWidth = $dataWidths->averageWidth($availableWidth); + $shortColWidths = $dataWidths->findShortColumns($averageWidth); + return $shortColWidths->enforceMinimums($minimumWidths); + } + + /** + * Distribute the remainig space among the columns that were not + * included in the list of "short" columns. + */ + public function distributeLongColumns($availableWidth, ColumnWidths $dataWidths, ColumnWidths $minimumWidths) + { + // First distribute the remainder without regard to the minimum widths. + $result = $dataWidths->distribute($availableWidth); + + // Find columns that are shorter than their minimum width. + $undersized = $result->findUndersizedColumns($minimumWidths); + + // Nothing too small? Great, we're done! + if ($undersized->isEmpty()) { + return $result; + } + + // Take out the columns that are too small and redistribute the rest. + $availableWidth -= $undersized->totalWidth(); + $remaining = $dataWidths->removeColumns($undersized->keys()); + $distributeRemaining = $this->distributeLongColumns($availableWidth, $remaining, $minimumWidths); + + return $undersized->combine($distributeRemaining); + } + + /** + * Return the length of the longest word in the string. + * @param string $str + * @return int + */ + protected static function longestWordLength($str) + { + $words = preg_split('#[ /-]#', $str); + $lengths = array_map(function ($s) { + return strlen($s); + }, $words); + return max($lengths); + } +} diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/ColumnWidths.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/ColumnWidths.php new file mode 100644 index 00000000..6995b6af --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/ColumnWidths.php @@ -0,0 +1,264 @@ +widths = $widths; + } + + public function paddingSpace( + $paddingInEachCell, + $extraPaddingAtEndOfLine = 0, + $extraPaddingAtBeginningOfLine = 0 + ) { + return ($extraPaddingAtBeginningOfLine + $extraPaddingAtEndOfLine + (count($this->widths) * $paddingInEachCell)); + } + + /** + * Find all of the columns that are shorter than the specified threshold. + */ + public function findShortColumns($thresholdWidth) + { + $thresholdWidths = array_fill_keys(array_keys($this->widths), $thresholdWidth); + + return $this->findColumnsUnderThreshold($thresholdWidths); + } + + /** + * Find all of the columns that are shorter than the corresponding minimum widths. + */ + public function findUndersizedColumns($minimumWidths) + { + return $this->findColumnsUnderThreshold($minimumWidths->widths()); + } + + protected function findColumnsUnderThreshold(array $thresholdWidths) + { + $shortColWidths = []; + foreach ($this->widths as $key => $maxLength) { + if (isset($thresholdWidths[$key]) && ($maxLength <= $thresholdWidths[$key])) { + $shortColWidths[$key] = $maxLength; + } + } + + return new ColumnWidths($shortColWidths); + } + + /** + * If the widths specified by this object do not fit within the + * provided avaiable width, then reduce them all proportionally. + */ + public function adjustMinimumWidths($availableWidth, $dataCellWidths) + { + $result = $this->selectColumns($dataCellWidths->keys()); + if ($result->isEmpty()) { + return $result; + } + $numberOfColumns = $dataCellWidths->count(); + + // How many unspecified columns are there? + $unspecifiedColumns = $numberOfColumns - $result->count(); + $averageWidth = $this->averageWidth($availableWidth); + + // Reserve some space for the columns that have no minimum. + // Make sure they collectively get at least half of the average + // width for each column. Or should it be a quarter? + $reservedSpacePerColumn = ($averageWidth / 2); + $reservedSpace = $reservedSpacePerColumn * $unspecifiedColumns; + + // Calculate how much of the available space is remaining for use by + // the minimum column widths after the reserved space is accounted for. + $remainingAvailable = $availableWidth - $reservedSpace; + + // Don't do anything if our widths fit inside the available widths. + if ($result->totalWidth() <= $remainingAvailable) { + return $result; + } + + // Shrink the minimum widths if the table is too compressed. + return $result->distribute($remainingAvailable); + } + + /** + * Return proportional weights + */ + public function distribute($availableWidth) + { + $result = []; + $totalWidth = $this->totalWidth(); + $lastColumn = $this->lastColumn(); + $widths = $this->widths(); + + // Take off the last column, and calculate proportional weights + // for the first N-1 columns. + array_pop($widths); + foreach ($widths as $key => $width) { + $result[$key] = round(($width / $totalWidth) * $availableWidth); + } + + // Give the last column the rest of the available width + $usedWidth = $this->sumWidth($result); + $result[$lastColumn] = $availableWidth - $usedWidth; + + return new ColumnWidths($result); + } + + public function lastColumn() + { + $keys = $this->keys(); + return array_pop($keys); + } + + /** + * Return the number of columns. + */ + public function count() + { + return count($this->widths); + } + + /** + * Calculate how much space is available on average for all columns. + */ + public function averageWidth($availableWidth) + { + if ($this->isEmpty()) { + debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + } + return $availableWidth / $this->count(); + } + + /** + * Return the available keys (column identifiers) from the calculated + * data set. + */ + public function keys() + { + return array_keys($this->widths); + } + + /** + * Set the length of the specified column. + */ + public function setWidth($key, $width) + { + $this->widths[$key] = $width; + } + + /** + * Return the length of the specified column. + */ + public function width($key) + { + return isset($this->widths[$key]) ? $this->widths[$key] : 0; + } + + /** + * Return all of the lengths + */ + public function widths() + { + return $this->widths; + } + + /** + * Return true if there is no data in this object + */ + public function isEmpty() + { + return empty($this->widths); + } + + /** + * Return the sum of the lengths of the provided widths. + */ + public function totalWidth() + { + return static::sumWidth($this->widths()); + } + + /** + * Return the sum of the lengths of the provided widths. + */ + public static function sumWidth($widths) + { + return array_reduce( + $widths, + function ($carry, $item) { + return $carry + $item; + } + ); + } + + /** + * Ensure that every item in $widths that has a corresponding entry + * in $minimumWidths is as least as large as the minimum value held there. + */ + public function enforceMinimums($minimumWidths) + { + $result = []; + if ($minimumWidths instanceof ColumnWidths) { + $minimumWidths = $minimumWidths->widths(); + } + $minimumWidths += $this->widths; + + foreach ($this->widths as $key => $value) { + $result[$key] = max($value, $minimumWidths[$key]); + } + + return new ColumnWidths($result); + } + + /** + * Remove all of the specified columns from this data structure. + */ + public function removeColumns($columnKeys) + { + $widths = $this->widths(); + + foreach ($columnKeys as $key) { + unset($widths[$key]); + } + + return new ColumnWidths($widths); + } + + /** + * Select all columns that exist in the provided list of keys. + */ + public function selectColumns($columnKeys) + { + $widths = []; + + foreach ($columnKeys as $key) { + if (isset($this->widths[$key])) { + $widths[$key] = $this->width($key); + } + } + + return new ColumnWidths($widths); + } + + /** + * Combine this set of widths with another set, and return + * a new set that contains the entries from both. + */ + public function combine(ColumnWidths $combineWith) + { + // Danger: array_merge renumbers numeric keys; that must not happen here. + $combined = $combineWith->widths(); + foreach ($this->widths() as $key => $value) { + $combined[$key] = $value; + } + return new ColumnWidths($combined); + } +} diff --git a/lib/composer/vendor/consolidation/output-formatters/test.php b/lib/composer/vendor/consolidation/output-formatters/test.php new file mode 100644 index 00000000..0e14ada8 --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/test.php @@ -0,0 +1,20 @@ + ['Name', ':', 'Rex', ], + 'species' => ['Species', ':', 'dog', ], + 'food' => ['Food', ':', 'kibble', ], + 'legs' => ['Legs', ':', '4', ], + 'description' => ['Description', ':', 'Rex is a very good dog, Brett. He likes kibble, and has four legs.', ], +]; + +$result = $wrapper->wrap($data); + +var_export($result); + diff --git a/lib/composer/vendor/consolidation/output-formatters/tests/testAPIDocs.php b/lib/composer/vendor/consolidation/output-formatters/tests/testAPIDocs.php index c324259b..ecb5eb04 100644 --- a/lib/composer/vendor/consolidation/output-formatters/tests/testAPIDocs.php +++ b/lib/composer/vendor/consolidation/output-formatters/tests/testAPIDocs.php @@ -18,7 +18,7 @@ class APIDocsTests extends \PHPUnit_Framework_TestCase } $testDocs = tempnam(sys_get_temp_dir(), 'TestAPIDocs.md'); - $currentDocs = getcwd() . '/docs/Api.md'; + $currentDocs = getcwd() . '/docs/api.md'; passthru("vendor/bin/phpdoc-md generate src > $testDocs"); $testDocsContent = file_get_contents($testDocs); @@ -27,6 +27,6 @@ class APIDocsTests extends \PHPUnit_Framework_TestCase $testDocsContent = str_replace (array("\r\n", "\r"), "\n", $testDocsContent); $currentDocsContent = str_replace (array("\r\n", "\r"), "\n", $currentDocsContent); - $this->assertEquals($testDocsContent, $currentDocsContent, "API docuementation out of date. Run 'composer Api' to update."); + $this->assertEquals($testDocsContent, $currentDocsContent, "API docuementation out of date. Run 'composer api' to update."); } } diff --git a/lib/composer/vendor/consolidation/output-formatters/tests/testFormatters.php b/lib/composer/vendor/consolidation/output-formatters/tests/testFormatters.php index d9e8710f..554633c9 100644 --- a/lib/composer/vendor/consolidation/output-formatters/tests/testFormatters.php +++ b/lib/composer/vendor/consolidation/output-formatters/tests/testFormatters.php @@ -7,6 +7,7 @@ use Consolidation\OutputFormatters\Options\FormatterOptions; use Consolidation\OutputFormatters\StructuredData\AssociativeList; use Consolidation\OutputFormatters\StructuredData\RowsOfFields; use Consolidation\OutputFormatters\StructuredData\PropertyList; +use Consolidation\OutputFormatters\StructuredData\ListDataFromKeys; use Symfony\Component\Console\Output\BufferedOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputInterface; @@ -47,8 +48,31 @@ one: a two: b three: c EOT; - $this->assertFormattedOutputMatches($expected, 'yaml', $data); + + $expected = <<assertFormattedOutputMatches($expected, 'list', $data); + + $data = new ListDataFromKeys($data); + + $expected = <<assertFormattedOutputMatches($expected, 'yaml', $data); + + $expected = <<assertFormattedOutputMatches($expected, 'list', $data); } function testNestedYaml() @@ -527,7 +551,6 @@ EOT; function testTableWithWordWrapping() { $options = new FormatterOptions(); - $options->setWidth(42); $data = [ [ @@ -538,19 +561,191 @@ EOT; $data = new RowsOfFields($data); $expected = <<setWidth(42); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + + $expected = <<setWidth(78); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testWrappingLotsOfColumns() + { + $options = new FormatterOptions(); + + $data = [ + [ + 'id' => '4d87b545-b4c3-4ece-9908-20c5c5e67e81', + 'name' => '123456781234567812345678123456781234567812345678', + 'service_level' => 'business', + 'framework' => 'wordpress-network', + 'owner' => '8558a08d-8059-45f6-9c4b-908299a025ee', + 'created' => '2017-05-24 19:28:45', + 'memberships' => 'b3a42ba5-755d-42ca-9109-21bde32809d0: Team,9bfaaf50-ece3-4460-acb8-dc1b8dd536e8: pantheon-engineering-canary-sites', + 'frozen' => 'false', + ], + [ + 'id' => '3d87b545-b4c3-4ece-9908-20c5c5e67e80', + 'name' => 'build-tools-136', + 'service_level' => 'free', + 'framework' => 'drupal8', + 'owner' => '7558a08d-8059-45f6-9c4b-908299a025ef', + 'created' => '2017-05-24 19:28:45', + 'memberships' => '5ae1fa30-8cc4-4894-8ca9-d50628dcba17: ci-for-drupal-8-composer', + 'frozen' => 'false', + ] + ]; + $data = new RowsOfFields($data); + + $expected = <<setWidth(125); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testTableWithWordWrapping2() + { + $options = new FormatterOptions(); + + $data = [ + [ + 'id' => 42, + 'vid' => 321, + 'description' => 'Life, the Universe and Everything.', + ], + [ + 'id' => 13, + 'vid' => 789, + 'description' => 'Why is six afraid of seven?', + ], + ]; + $data = new RowsOfFields($data); + $expected = <<setWidth(42); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testTableWithWordWrapping3() + { + $options = new FormatterOptions(); + $data = [ + 'name' => 'Rex', + 'species' => 'dog', + 'food' => 'kibble', + 'legs' => '4', + 'description' => 'Rex is a very good dog, Brett. He likes kibble, and has four legs.', + ]; + $data = new PropertyList($data); + + $expected = <<setWidth(42); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testTableWithWordWrapping4() + { + $options = new FormatterOptions(); + + $data = [ + 'name' => ['label' => 'Name', 'sep' => ':', 'value' => 'Rex', ], + 'species' => ['label' => 'Species', 'sep' => ':', 'value' => 'dog', ], + 'food' => ['label' => 'Food', 'sep' => ':', 'value' => 'kibble', ], + 'legs' => ['label' => 'Legs', 'sep' => ':', 'value' => '4', ], + 'description' => ['label' => 'Description', 'sep' => ':', 'value' => 'Rex is a very good dog, Brett. He likes kibble, and has four legs.', ], + ]; + $data = new RowsOfFields($data); + $expected = <<setWidth(78); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testTableWithWordWrapping5() + { + $options = new FormatterOptions(); + $data = [ + 'name' => ['Name', ':', 'Rex', ], + 'species' => ['Species', ':', 'dog', ], + 'food' => ['Food', ':', 'kibble', ], + 'legs' => ['Legs', ':', '4', ], + 'description' => ['Description', ':', 'Rex is a very good dog, Brett. He likes kibble, and has four legs.', ], + ]; + $data = new RowsOfFields($data); + $expected = <<setWidth(78); + $options->setIncludeFieldLables(false); + $options->setTableStyle('compact'); $this->assertFormattedOutputMatches($expected, 'table', $data, $options); } @@ -842,6 +1037,17 @@ EOT; ----- EOT; $this->assertFormattedOutputMatches($expectedSingleField, 'table', $data, $configurationData, ['field' => 'San']); + + $expectedEmptyColumn = <<assertFormattedOutputMatches($expectedEmptyColumn, 'table', new RowsOfFields([]), $configurationData, ['field' => 'San']); + + $this->assertFormattedOutputMatches('', '', new RowsOfFields([]), $configurationData, ['field' => 'San']); + $this->assertFormattedOutputMatches('[]', 'json', new RowsOfFields([]), $configurationData, ['field' => 'San']); } /** @@ -941,6 +1147,20 @@ EOT; ->setFieldLabels(['one' => 'I', 'two' => 'II', 'three' => 'III']); $this->assertFormattedOutputMatches($expected, 'table', $data, $formatterOptionsWithFieldLables); + $expectedDrushStyleTable = <<setTableStyle('compact') + ->setListDelimiter(':'); + $this->assertFormattedOutputMatches($expectedDrushStyleTable, 'table', $data, $formatterOptionsWithFieldLables); + + // Adding an extra field that does not exist in the data set should not change the output $formatterOptionsWithExtraFieldLables = new FormatterOptions(); $formatterOptionsWithExtraFieldLables @@ -1261,8 +1481,8 @@ EOT; { "name": "widget-collection", "description": "A couple of widgets.", - "widgets": [ - { + "widgets": { + "usual": { "name": "usual", "colors": [ "red", @@ -1275,7 +1495,7 @@ EOT; "triangle" ] }, - { + "unusual": { "name": "unusual", "colors": [ "muave", @@ -1288,7 +1508,7 @@ EOT; "trapazoid" ] } - ] + } } EOT; diff --git a/lib/composer/vendor/consolidation/robo/.github/issue_template.md b/lib/composer/vendor/consolidation/robo/.github/issue_template.md deleted file mode 100644 index 97335f49..00000000 --- a/lib/composer/vendor/consolidation/robo/.github/issue_template.md +++ /dev/null @@ -1,11 +0,0 @@ -### Steps to reproduce -What did you do? - -### Expected behavior -Tell us what should happen - -### Actual behavior -Tell us what happens instead - -### System Configuration -Which O.S. and PHP version are you using? diff --git a/lib/composer/vendor/consolidation/robo/.github/pull_request_template.md b/lib/composer/vendor/consolidation/robo/.github/pull_request_template.md deleted file mode 100644 index d39b1522..00000000 --- a/lib/composer/vendor/consolidation/robo/.github/pull_request_template.md +++ /dev/null @@ -1,13 +0,0 @@ -### Overview -This pull request: - -- [ ] Fixes a bug -- [ ] Adds a feature -- [ ] Breaks backwards compatibility -- [ ] Needs tests - -### Summary -Short overview of what changed. - -### Description -Any additional information. diff --git a/lib/composer/vendor/consolidation/robo/.gitignore b/lib/composer/vendor/consolidation/robo/.gitignore deleted file mode 100644 index bc900d2f..00000000 --- a/lib/composer/vendor/consolidation/robo/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -vendor/ -.idea/ -build -site/ -robotheme/ -tests/_log/* -tests/_helpers/_generated/* -composer.phar -robo.phar diff --git a/lib/composer/vendor/consolidation/robo/.scrutinizer.yml b/lib/composer/vendor/consolidation/robo/.scrutinizer.yml deleted file mode 100644 index f84f59b4..00000000 --- a/lib/composer/vendor/consolidation/robo/.scrutinizer.yml +++ /dev/null @@ -1,3 +0,0 @@ -filter: - excluded_paths: - - "RoboFile.php" diff --git a/lib/composer/vendor/consolidation/robo/.travis.yml b/lib/composer/vendor/consolidation/robo/.travis.yml deleted file mode 100644 index b7361a49..00000000 --- a/lib/composer/vendor/consolidation/robo/.travis.yml +++ /dev/null @@ -1,47 +0,0 @@ -language: php - -branches: - # Only test the master branch and SemVer tags. - only: - - master - - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ - -matrix: - include: - - php: 7.0 - env: dependencies=highest - - php: 5.6 - - php: 5.5 - - php: 5.5 - env: dependencies=lowest - -sudo: false - -cache: - directories: - - $HOME/.composer/cache - -before_script: - - if [ -z "$dependencies" ]; then composer install --prefer-dist; fi; - - if [ "$dependencies" = "lowest" ]; then composer update --prefer-dist --prefer-lowest -n; fi; - - if [ "$dependencies" = "highest" ]; then composer update --prefer-dist -n; fi; - -script: "./robo test --coverage" - -after_success: - - travis_retry php vendor/bin/coveralls -v - -# Prior to a deploy, build a fresh robo.phar -before_deploy: - - ./robo phar:build - -# Deploy instructions set up via `travis setup releases` per -# https://docs.travis-ci.com/user/deployment/releases -deploy: - provider: releases - api_key: - secure: EdmB1nW5gj5nggYfmHv20enSgvRIAl1PIWV5GKmkxAJwuummh3UqdI7z0ecTGdw2IBgJx9lizNvqhcWjXbpNhE9VaaT1sHFCKv4Zust6sLb9bneK3oLRdJk2wemfrrZQpdH900zA0o7b3CHVth8UhkrCB4FXVDjUW13K061EXG8= - file: robo.phar - skip_cleanup: true - on: - tags: true diff --git a/lib/composer/vendor/consolidation/robo/CHANGELOG.md b/lib/composer/vendor/consolidation/robo/CHANGELOG.md index d00b18c9..fc22c371 100644 --- a/lib/composer/vendor/consolidation/robo/CHANGELOG.md +++ b/lib/composer/vendor/consolidation/robo/CHANGELOG.md @@ -1,10 +1,79 @@ # Changelog -#### 1.0.4 +### 1.2.1 12/28/2017 + +* Fixes to tests / build only. + +### 1.2.0 12/12/2017 + +* Support Symfony 4 Components (#651) +* Test multiple composer dependency permutations with https://github.com/greg-1-anderson/composer-test-scenarios + +### 1.1.5 10/25/2017 + +* Load option default values from $input for all options defined in the Application's input definition (#642) +* BUGFIX: Store global options in 'options' namespace rather than at the top level of config. + +### 1.1.4 10/16/2017 + +* Update order of command event hooks so that the option settings are injected prior to configuration being injected, so that dynamic options are available for config injection. (#636) +* Add shallow clone method to GithubStack task. by Stefan Lange (#633) +* Make Changelog task more flexible. by Matthew Grasmick(#631) +* Adding accessToken() to GitHub task. by Matthew Grasmick (#630) + +### 1.1.3 09/23/2017 + +* Add self:update command to update Robo phar distributions to the latest available version on GitHub. by Alexander Menk +* Fix Robo\Task\Docker\Base to implement CommandInterface. by Alexei Gorobet (#625) +* Add overwrite argument to Robo\Task\Filesystem\loadShortcuts.php::_rename by Alexei Gorobets (#624) +* Add failGroup() method for Codeception run command. by Max Gorovenko (#622) +* Set up composer-lock-updater on cron. (#618) +* Fix robo.yml loader by exporting processor instead of loader. By thomscode (#612) + +### 1.1.2 07/28/2017 + +* Inject option default values in help (#607) +* Add noRebuild() method for Codeception run command. By Max Gorovenko (#603) + +### 1.1.1 07/07/2017 + +* Add an option to wait an interval of time between parallel processes. By Gemma Pou #601 +* Do not print dire messages about Robo bootstrap problems when a valid command (e.g. help, list, init, --version) runs. #502 + +### 1.1.0 06/29/2017 + +* Configuration for multiple commands or multiple tasks may now be shared by attaching the configuration values to the task namespace or the command group. #597 +* *Breaking* Task configuration taken from property `task.PARTIAL_NAMESPACE.CLASSNAME.settings` instead of `task.CLASSNAME.settings`. Breaks backwards compatibility only with experimental configuration features introduced in version 1.0.6. Config is now stable, as of this release; there will be no more breaking config changes until Robo 2.0. #596 + +### 1.0.8 06/02/2017 + +* Fix regression in 1.0.7: Allow tasks to return results of types other than \Robo\Result. #585 +* Allow Copydir exclude method to specify subfolders by Alex Skrypnyk #590 +* Add composer init task, and general rounding out of composer tasks. #586 +* Enhance SemVer task so that it can be used with files or strings. #589 + +#### 1.0.7 05/30/2017 + +* Add a state system for collections to allow tasks to pass state to later tasks. +* Ensure that task results are returned when in stopOnFail() mode. +* Make rawArg() and detectInteractive chainable. By Matthew Grasmick #553 #558 +* [CopyDir] Use Symfony Filesystem. By malikkotob #555 +* [Composer] Implement CommandInterface. By Ivan Borzenkov #561 + +#### 1.0.6 03/31/2017 + +* Add configuration features to inject values into commandline option and task setter methods. Experimental; incompatible changes may be introduced prior to the stable release of configuration in version 1.1.0. + +#### 1.0.5 11/23/2016 + +* Incorporate word-wrapping from output-formatters 3.1.5 +* Incorporate custom event handlers from annotated-command 2.2.0 + +#### 1.0.4 11/15/2016 * Updated to latest changes in `master` branch. Phar and tag issues. -#### 1.0.0 +#### 1.0.0 10/10/2016 * [Collection] Add tasks to a collection, and implement them as a group with rollback * Tasks may be added to a collection via `$collection->add($task);` @@ -45,7 +114,7 @@ * Rename 'FileSystem' to 'Filesystem' wherever it occurs. * Current directory is changed with `chdir` only if specified via the `--load-from` option (RC2) -#### 0.6.0 +#### 0.6.0 10/30/2015 * Added `--load-from` option to make Robo start RoboFiles from other directories. Use it like `robo --load-from /path/to/where/RobFile/located`. * Robo will not ask to create RoboFile if it does not exist, `init` command should be used. @@ -54,7 +123,7 @@ * [FlattenDir] task added by @gabor-udvari * Robo Runner can easily extended for custom runner by passing RoboClass and RoboFile parameters to constructor. By @rdeutz See #232 -#### 0.5.4 +#### 0.5.4 08/31/2015 * [WriteToFile] Fixed by @gabor-udvari: always writing to file regardless whether any changes were made or not. This can bring the taskrunner into an inifinite loop if a replaced file is being watched. * [Scss] task added, requires `leafo/scssphp` library to compile by @gabor-udvari @@ -63,7 +132,7 @@ * [Less] fixed passing closure as compiler by @pr0nbaer * [Sass] task added by *2015-08-31* -#### 0.5.3 +#### 0.5.3 07/15/2015 * [Rsync] Ability to use remote shell with identity file by @Mihailoff * [Less] Task added by @burzum @@ -75,7 +144,7 @@ * [Minify] Making it possible to pass options to the JS minification @burzum *2015-03-05* * [CopyDir] Create destination recursively @boedah *2015-02-28* -#### 0.5.2 +#### 0.5.2 02/24/2015 * [Phar] do not compress phar if more than 1000 files included (causes internal PHP error) *2015-02-24* * _copyDir and _mirrorDir shortcuts fixed by @boedah *2015-02-24* @@ -85,14 +154,14 @@ * [PhpServer] fixed passing arguments to server *2015-02-24* -#### 0.5.1 +#### 0.5.1 01/27/2015 * [Exec] fixed execution of background jobs, processes persist till the end of PHP script *2015-01-27* * [Ssh] Fixed SSH task by @Butochnikov *2015-01-27* * [CopyDir] fixed shortcut usage by @boedah *2015-01-27* * Added default value options for Configuration trait by @TamasBarta *2015-01-27* -#### 0.5.0 +#### 0.5.0 01/22/2015 Refactored core @@ -112,7 +181,7 @@ Refactored core * [Docker] Tasks added * [Gulp] Task added by @schorsch3000 -#### 0.4.7 +#### 0.4.7 12/26/2014 * [Minify] Task added by @Rarst. Requires additional dependencies installed *2014-12-26* * [Help command is populated from annotation](https://github.com/consolidation-org/Robo/pull/71) by @jonsa *2014-12-26* @@ -129,7 +198,7 @@ Refactored core * [Rsync] Shell escape rsync exclude pattern by @boedah. Fixes #77 (BC break) *2014-12-26* * [Npm] Task added by @AAlakkad *2014-12-26* -#### 0.4.6 +#### 0.4.6 10/17/2014 * [Exec] Output from buffer is not spoiled by special chars *2014-10-17* * [PHPUnit] detect PHPUnit on Windows or when is globally installed with Composer *2014-10-17* @@ -139,7 +208,7 @@ Refactored core * [ExecTask] now uses Executable trait with printed, dir, arg, option methods added *2014-08-12* -#### 0.4.5 +#### 0.4.5 08/05/2014 * [Watch] bugfix: Watch only tracks last file if given array of files #46 *2014-08-05* * All executable tasks can configure working directory with `dir` option diff --git a/lib/composer/vendor/consolidation/robo/README.md b/lib/composer/vendor/consolidation/robo/README.md index 8c807591..bda0b728 100644 --- a/lib/composer/vendor/consolidation/robo/README.md +++ b/lib/composer/vendor/consolidation/robo/README.md @@ -10,6 +10,7 @@ [![License](https://poser.pugx.org/consolidation/robo/license.png)](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a?child=57c4a6fe968d64004d97620a#tab-licenses) [![Build Status](https://travis-ci.org/consolidation/Robo.svg?branch=master)](https://travis-ci.org/consolidation/Robo) +[![Windows CI](https://ci.appveyor.com/api/projects/status/0823hnh06pw8ir4d?svg=true)](https://ci.appveyor.com/project/greg-1-anderson/robo) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/Robo/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/Robo/?branch=master) [![Dependency Status](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a/badge.svg?style=flat-square)](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a) @@ -88,7 +89,7 @@ class RoboFile extends \Robo\Tasks ``` If you execute `robo` you will see this task added to list of available task with name: `test:acceptance`. -To execute it you shoud run `robo test:acceptance`. You may change path to selenium server by passing new path as a argument: +To execute it you should run `robo test:acceptance`. You may change path to selenium server by passing new path as a argument: ``` robo test:acceptance "C:\Downloads\selenium.jar" diff --git a/lib/composer/vendor/consolidation/robo/RoboFile.php b/lib/composer/vendor/consolidation/robo/RoboFile.php index b9a2810d..53dbc830 100644 --- a/lib/composer/vendor/consolidation/robo/RoboFile.php +++ b/lib/composer/vendor/consolidation/robo/RoboFile.php @@ -1,7 +1,5 @@ taskExec("./vendor/bin/phpcs --standard=PSR2 {$strict} {$file}")->run(); + $result = $this->taskExec("./vendor/bin/phpcs --standard=PSR2 --exclude=Squiz.Classes.ValidClassName {$strict} {$file}")->run(); if (!$result->wasSuccessful()) { if (!$options['autofix']) { $options['autofix'] = $this->confirm('Would you like to run phpcbf to fix the reported errors?'); } if ($options['autofix']) { - $result = $this->taskExec("./vendor/bin/phpcbf --standard=PSR2 {$file}")->run(); + $result = $this->taskExec("./vendor/bin/phpcbf --standard=PSR2 --exclude=Squiz.Classes.ValidClassName {$file}")->run(); } } return $result; @@ -75,30 +73,45 @@ class RoboFile extends \Robo\Tasks */ public function release($opts = ['beta' => false]) { - $this->yell("Releasing Robo"); - $stable = true; - if ($opts['beta']) { - $stable = false; - $this->say('non-stable release'); + $version = \Robo\Robo::VERSION; + $stable = !$opts['beta']; + if ($stable) { + $version = preg_replace('/-.*/', '', $version); } + else { + $version = $this->incrementVersion($version, 'beta'); + } + $this->writeVersion($version); + $this->yell("Releasing Robo $version"); $this->docs(); $this->taskGitStack() ->add('-A') - ->commit("auto-update") + ->commit("Robo release $version") ->pull() ->push() ->run(); - if ($stable) $this->pharPublish(); + if ($stable) { + $this->pharPublish(); + } $this->publish(); $this->taskGitStack() - ->tag(\Robo\Robo::VERSION) + ->tag($version) ->push('origin master --tags') ->run(); - if ($stable) $this->versionBump(); + if ($stable) { + $version = $this->incrementVersion($version) . '-dev'; + $this->writeVersion($version); + + $this->taskGitStack() + ->add('-A') + ->commit("Prepare for $version") + ->push() + ->run(); + } } /** @@ -110,8 +123,9 @@ class RoboFile extends \Robo\Tasks */ public function changed($addition) { + $version = preg_replace('/-.*/', '', \Robo\Robo::VERSION); return $this->taskChangelog() - ->version(\Robo\Robo::VERSION) + ->version($version) ->change($addition) ->run(); } @@ -121,20 +135,71 @@ class RoboFile extends \Robo\Tasks * * @param string $version The new verison for Robo. * Defaults to the next minor (bugfix) version after the current relelase. + * @option stage The version stage: dev, alpha, beta or rc. Use empty for stable. */ - public function versionBump($version = '') + public function versionBump($version = '', $options = ['stage' => '']) { + // If the user did not specify a version, then update the current version. if (empty($version)) { - $versionParts = explode('.', \Robo\Robo::VERSION); - $versionParts[count($versionParts)-1]++; - $version = implode('.', $versionParts); + $version = $this->incrementVersion(\Robo\Robo::VERSION, $options['stage']); } + return $this->writeVersion($version); + } + + /** + * Write the specified version string back into the Robo.php file. + * @param string $version + */ + protected function writeVersion($version) + { + // Write the result to a file. return $this->taskReplaceInFile(__DIR__.'/src/Robo.php') - ->from("VERSION = '".\Robo\Robo::VERSION."'") + ->regex("#VERSION = '[^']*'#") ->to("VERSION = '".$version."'") ->run(); } + /** + * Advance to the next SemVer version. + * + * The behavior depends on the parameter $stage. + * - If $stage is empty, then the patch or minor version of $version is incremented + * - If $stage matches the current stage in the current version, then add one + * to the stage (e.g. alpha3 -> alpha4) + * - If $stage does not match the current stage in the current version, then + * reset to '1' (e.g. alpha4 -> beta1) + * + * @param string $version A SemVer version + * @param string $stage dev, alpha, beta, rc or an empty string for stable. + * @return string + */ + protected function incrementVersion($version, $stage = '') + { + $stable = empty($stage); + $versionStageNumber = '0'; + preg_match('/-([a-zA-Z]*)([0-9]*)/', $version, $match); + $match += ['', '', '']; + $versionStage = $match[1]; + $versionStageNumber = $match[2]; + if ($versionStage != $stage) { + $versionStageNumber = 0; + } + $version = preg_replace('/-.*/', '', $version); + $versionParts = explode('.', $version); + if ($stable) { + $versionParts[count($versionParts)-1]++; + } + $version = implode('.', $versionParts); + if (!$stable) { + $version .= '-' . $stage; + if ($stage != 'dev') { + $versionStageNumber++; + $version .= $versionStageNumber; + } + } + return $version; + } + /** * Generate the Robo documentation files. */ @@ -194,6 +259,25 @@ class RoboFile extends \Robo\Tasks 'setBuilder', 'getBuilder', 'collectionBuilder', + 'setVerbosityThreshold', + 'verbosityThreshold', + 'setOutputAdapter', + 'outputAdapter', + 'hasOutputAdapter', + 'verbosityMeetsThreshold', + 'writeMessage', + 'detectInteractive', + 'background', + 'timeout', + 'idleTimeout', + 'env', + 'envVars', + 'setInput', + 'interactive', + 'silent', + 'printed', + 'printOutput', + 'printMetadata', ]; return !in_array($m->name, $undocumentedMethods) && $m->isPublic(); // methods are not documented } @@ -289,7 +373,8 @@ class RoboFile extends \Robo\Tasks ->args($devProjectsToRemove) ->taskComposerInstall() ->dir($roboBuildDir) - ->printed(false) + ->noScripts() + ->printed(true) ->run(); // Exit if the preparation step failed diff --git a/lib/composer/vendor/consolidation/robo/composer.json b/lib/composer/vendor/consolidation/robo/composer.json index adc54130..fcb93ae8 100644 --- a/lib/composer/vendor/consolidation/robo/composer.json +++ b/lib/composer/vendor/consolidation/robo/composer.json @@ -9,9 +9,6 @@ } ], "autoload":{ - "classmap": [ - "scripts/composer/ScriptHandler.php" - ], "psr-4":{ "Robo\\":"src" } @@ -26,43 +23,67 @@ "php": ">=5.5.0", "league/container": "^2.2", "consolidation/log": "~1", - "consolidation/annotated-command": "^2.0.1", - "consolidation/output-formatters": "^2.1.2|~3", - "symfony/finder": "~2.5|~3.0", - "symfony/console": "~2.8|~3.0", - "symfony/process": "~2.5|~3.0", - "symfony/filesystem": "~2.5|~3.0", - "symfony/event-dispatcher": "~2.5|~3.0" + "consolidation/config": "^1.0.1", + "consolidation/annotated-command": "^2.8.2", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", + "symfony/finder": "^2.5|^3|^4", + "symfony/console": "^2.8|^3|^4", + "symfony/process": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4" }, "require-dev": { "patchwork/jsqueeze": "~2", - "henrikbjorn/lurker": "~1", - "natxet/CssMin": "~3", + "natxet/CssMin": "3.0.4", "pear/archive_tar": "^1.4.2", - "codeception/base": "^2.2.6", + "codeception/base": "^2.3.7", "codeception/verify": "^0.3.2", - "codeception/aspect-mock": "~1", - "satooshi/php-coveralls": "~1", - "squizlabs/php_codesniffer": "~2", - "phpunit/php-code-coverage": "~2|~4" + "codeception/aspect-mock": "^1|^2.1.1", + "greg-1-anderson/composer-test-scenarios": "^1", + "satooshi/php-coveralls": "^2", + "phpunit/php-code-coverage": "~2|~4", + "squizlabs/php_codesniffer": "^2.8" }, "scripts": { - "pre-install-cmd": [ - "Robo\\composer\\ScriptHandler::checkDependencies" + "cs": "./robo sniff", + "unit": "./robo test", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" ], - "cs": "/robo sniff", - "test": "./robo test" + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "pre-install-cmd": [ + "Robo\\composer\\ScriptHandler::checkDependencies" + ], + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0' --platform-php '7.1.3'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.5.9' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.6.3" + } }, "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" } }, "suggest": { "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively.", "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", "patchwork/jsqueeze": "For minifying JS files in taskMinify", - "natxet/CssMin": "For minifying JS files in taskMinify" + "natxet/CssMin": "For minifying CSS files in taskMinify" }, "replace": { "codegyre/robo": "< 1.0" diff --git a/lib/composer/vendor/consolidation/robo/composer.lock b/lib/composer/vendor/consolidation/robo/composer.lock index d3f4b7e9..35ea591a 100644 --- a/lib/composer/vendor/consolidation/robo/composer.lock +++ b/lib/composer/vendor/consolidation/robo/composer.lock @@ -4,35 +4,33 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "01e04acee2b5eae505aa21f88465a6a4", - "content-hash": "ebfcda102135166d31ae314f4dfec7da", + "content-hash": "c755802dc01c48c0f80de1866ba616c5", "packages": [ { "name": "consolidation/annotated-command", - "version": "2.0.3", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "0bcb15e86b8bfbb1972fc6bc31b7d9c3fa40285d" + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0bcb15e86b8bfbb1972fc6bc31b7d9c3fa40285d", - "reference": "0bcb15e86b8bfbb1972fc6bc31b7d9c3fa40285d", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/e97c38717eae23a2bafcf3f09438290eee6ebeb4", + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4", "shasum": "" }, "require": { - "consolidation/output-formatters": "~2|~3", + "consolidation/output-formatters": "^3.1.12", "php": ">=5.4.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "psr/log": "~1", - "symfony/console": "^2.8|~3", - "symfony/event-dispatcher": "^2.5|~3", - "symfony/finder": "^2.5|~3" + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", "squizlabs/php_codesniffer": "^2.7" }, "type": "library", @@ -57,29 +55,84 @@ } ], "description": "Initialize Symfony Console commands from annotated command class methods.", - "time": "2016-11-14 23:51:12" + "time": "2017-11-29T16:23:23+00:00" }, { - "name": "consolidation/log", - "version": "1.0.3", + "name": "consolidation/config", + "version": "1.0.9", "source": { "type": "git", - "url": "https://github.com/consolidation/log.git", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254" + "url": "https://github.com/consolidation/config.git", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/log/zipball/74ba81b4edc585616747cc5c5309ce56fec41254", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254", + "url": "https://api.github.com/repos/consolidation/config/zipball/34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Provide configuration services for a commandline tool.", + "time": "2017-12-22T17:28:19+00:00" + }, + { + "name": "consolidation/log", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/consolidation/log.git", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/log/zipball/dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821", "shasum": "" }, "require": { "php": ">=5.5.0", "psr/log": "~1.0", - "symfony/console": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4" }, "require-dev": { "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", "squizlabs/php_codesniffer": "2.*" }, "type": "library", @@ -104,37 +157,37 @@ } ], "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", - "time": "2016-03-23 23:46:42" + "time": "2017-11-29T01:44:16+00:00" }, { "name": "consolidation/output-formatters", - "version": "3.0.1", + "version": "3.1.13", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "31aac0f6ffd76833a70a12ba7fb3e428f78b55ef" + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/31aac0f6ffd76833a70a12ba7fb3e428f78b55ef", - "reference": "31aac0f6ffd76833a70a12ba7fb3e428f78b55ef", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", "shasum": "" }, "require": { "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -153,22 +206,25 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2016-11-14 18:44:33" + "time": "2017-11-29T15:25:38+00:00" }, { "name": "container-interop/container-interop", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, + "require": { + "psr/container": "^1.0" + }, "type": "library", "autoload": { "psr-4": { @@ -180,28 +236,184 @@ "MIT" ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "time": "2014-12-30 15:22:37" + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" }, { - "name": "league/container", - "version": "2.2.0", + "name": "dflydev/dot-access-data", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/container.git", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1" + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/c0e7d947b690891f700dc4967ead7bdb3d6708c1", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.1", - "php": ">=5.4.0" + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" + }, + { + "name": "grasmash/yaml-expander", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in a yaml file.", + "time": "2017-12-16T16:06:03+00:00" + }, + { + "name": "league/container", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" }, "provide": { - "container-interop/container-interop-implementation": "^1.1" + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" }, "replace": { "orno/di": "~2.0" @@ -212,7 +424,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", + "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } }, @@ -244,27 +456,24 @@ "provider", "service" ], - "time": "2016-03-17 11:07:59" + "time": "2017-05-10T09:20:27+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "1.0", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" + "php": ">=5.3.0" }, "type": "library", "extra": { @@ -274,9 +483,7 @@ }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -285,112 +492,20 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], - "time": "2015-12-27 11:43:31" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" - }, - "type": "library", - "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": "2016-09-30 07:12:33" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "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": "2016-06-10 07:14:17" + "time": "2017-02-14T16:28:37+00:00" }, { "name": "psr/log", @@ -437,41 +552,49 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "symfony/console", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065" + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c99da1119ae61e15de0e4829196b9fba6f73d065", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065", + "url": "https://api.github.com/repos/symfony/console/zipball/9f21adfb92a9315b73ae2ed43138988ee4913d4e", + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, "require-dev": { "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/lock": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -498,37 +621,36 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-10-06 01:44:51" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/debug", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "url": "https://api.github.com/repos/symfony/debug/zipball/543deab3ffff94402440b326fc94153bae2dfa7a", + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -555,31 +677,34 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2017-12-12T08:27:14+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc" + "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b869cbf8a15ca6261689de2c28a7d7f2d0706835", + "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -588,7 +713,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -615,29 +740,29 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-10-13 06:28:43" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/filesystem", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6" + "reference": "25b135bea251829e3db6a77d773643408b575ed4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0565b61bf098cb4dc09f4f103f033138ae4f42c6", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/25b135bea251829e3db6a77d773643408b575ed4", + "reference": "25b135bea251829e3db6a77d773643408b575ed4", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -664,29 +789,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-10-18 04:30:12" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/finder", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", + "url": "https://api.github.com/repos/symfony/finder/zipball/dac8d7db537bac7ad8143eb11360a8c2231f251a", + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -713,20 +838,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-09-28 00:11:12" + "time": "2017-11-05T16:10:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -738,7 +863,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -772,29 +897,29 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/process", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94" + "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94", + "url": "https://api.github.com/repos/symfony/process/zipball/bb3ef65d493a6d57297cad6c560ee04e2a8f5098", + "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -821,83 +946,47 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-09-29 14:13:09" + "time": "2017-12-14T19:40:10+00:00" }, { - "name": "victorjonsson/markdowndocs", - "version": "1.3.7", + "name": "symfony/yaml", + "version": "v3.4.2", "source": { "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" + "url": "https://github.com/symfony/yaml.git", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536", "shasum": "" }, "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/console": "<3.4" }, "require-dev": { - "phpunit/phpunit": "3.7.23" + "symfony/console": "~3.4|~4.0" }, - "bin": [ - "bin/phpdoc-md" - ], - "type": "library", - "autoload": { - "psr-0": { - "PHPDocsMD": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" - } - ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", - "time": "2016-10-11 21:10:19" - }, - { - "name": "webmozart/assert", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", - "shasum": "" - }, - "require": { - "php": "^5.3.3|^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -905,67 +994,20 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2016-08-09 15:02:57" + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-12-11T20:38:23+00:00" } ], "packages-dev": [ - { - "name": "andrewsville/php-token-reflection", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Andrewsville/PHP-Token-Reflection.git", - "reference": "e6d0ac2baf66cdf154be34c3d2a2aa1bd4b426ee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Andrewsville/PHP-Token-Reflection/zipball/e6d0ac2baf66cdf154be34c3d2a2aa1bd4b426ee", - "reference": "e6d0ac2baf66cdf154be34c3d2a2aa1bd4b426ee", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "TokenReflection": "./" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3" - ], - "authors": [ - { - "name": "Ondřej Nešpor", - "homepage": "https://github.com/andrewsville" - }, - { - "name": "Jaroslav Hanslík", - "homepage": "https://github.com/kukulich" - } - ], - "description": "Library emulating the PHP internal reflection using just the tokenized source code.", - "homepage": "http://andrewsville.github.com/PHP-Token-Reflection/", - "keywords": [ - "library", - "reflection", - "tokenizer" - ], - "time": "2014-08-06 16:37:08" - }, { "name": "behat/gherkin", "version": "v4.4.5", @@ -1023,25 +1065,25 @@ "gherkin", "parser" ], - "time": "2016-10-30 11:50:56" + "time": "2016-10-30T11:50:56+00:00" }, { "name": "codeception/aspect-mock", - "version": "1.0.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/Codeception/AspectMock.git", - "reference": "666d0a80239eeda1e2a31219d83fce4f17529b7f" + "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/666d0a80239eeda1e2a31219d83fce4f17529b7f", - "reference": "666d0a80239eeda1e2a31219d83fce4f17529b7f", + "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba", + "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba", "shasum": "" }, "require": { - "goaop/framework": "~1.0", - "php": ">=5.4.0", + "goaop/framework": "^2.0.0", + "php": ">=5.6.0", "symfony/finder": "~2.4|~3.0" }, "require-dev": { @@ -1062,24 +1104,24 @@ "authors": [ { "name": "Michael Bodnarchuk", - "email": "davert.php@mailican.com" + "email": "davert@codeception.com" } ], "description": "Experimental Mocking Framework powered by Aspects", - "time": "2016-03-14 20:52:23" + "time": "2017-10-24T10:20:17+00:00" }, { "name": "codeception/base", - "version": "2.2.6", + "version": "2.3.7", "source": { "type": "git", "url": "https://github.com/Codeception/base.git", - "reference": "f70c77fe9941c41f567fe62b1e96e1ed33235ac7" + "reference": "c3fcea61525e62361ecc45aea1837f225ba73b4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/base/zipball/f70c77fe9941c41f567fe62b1e96e1ed33235ac7", - "reference": "f70c77fe9941c41f567fe62b1e96e1ed33235ac7", + "url": "https://api.github.com/repos/Codeception/base/zipball/c3fcea61525e62361ecc45aea1837f225ba73b4f", + "reference": "c3fcea61525e62361ecc45aea1837f225ba73b4f", "shasum": "" }, "require": { @@ -1088,17 +1130,18 @@ "ext-mbstring": "*", "guzzlehttp/psr7": "~1.0", "php": ">=5.4.0 <8.0", - "phpunit/php-code-coverage": ">=2.1.3 <5.0", - "phpunit/phpunit": ">4.8.20 <6.0", - "sebastian/comparator": "~1.1", - "sebastian/diff": "^1.4", - "symfony/browser-kit": ">=2.7 <4.0", - "symfony/console": ">=2.7 <4.0", - "symfony/css-selector": ">=2.7 <4.0", - "symfony/dom-crawler": ">=2.7 <4.0", - "symfony/event-dispatcher": ">=2.7 <4.0", - "symfony/finder": ">=2.7 <4.0", - "symfony/yaml": ">=2.7 <4.0" + "phpunit/php-code-coverage": ">=2.2.4 <6.0", + "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0", + "phpunit/phpunit-mock-objects": ">2.3 <5.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", @@ -1106,20 +1149,24 @@ "flow/jsonpath": "~0.2", "league/factory-muffin": "^3.0", "league/factory-muffin-faker": "^1.0", - "mongodb/mongodb": "^1.0", "monolog/monolog": "~1.8", "pda/pheanstalk": "~3.0", "php-amqplib/php-amqplib": "~2.4", "predis/predis": "^1.0", - "squizlabs/php_codesniffer": "~2.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": [ @@ -1155,20 +1202,20 @@ "functional testing", "unit testing" ], - "time": "2016-10-27 00:07:01" + "time": "2017-12-12T04:54:15+00:00" }, { "name": "codeception/verify", - "version": "0.3.2", + "version": "0.3.3", "source": { "type": "git", "url": "https://github.com/Codeception/Verify.git", - "reference": "b06d706261d1fee0cc312bacc5c1b7c506e5213a" + "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Verify/zipball/b06d706261d1fee0cc312bacc5c1b7c506e5213a", - "reference": "b06d706261d1fee0cc312bacc5c1b7c506e5213a", + "url": "https://api.github.com/repos/Codeception/Verify/zipball/5d649dda453cd814dadc4bb053060cd2c6bb4b4c", + "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c", "shasum": "" }, "require-dev": { @@ -1191,20 +1238,20 @@ } ], "description": "BDD assertion library for PHPUnit", - "time": "2016-08-29 22:49:25" + "time": "2017-01-09T10:58:51+00:00" }, { "name": "doctrine/annotations", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "30e07cf03edc3cd3ef579d0dd4dd8c58250799a5" + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/30e07cf03edc3cd3ef579d0dd4dd8c58250799a5", - "reference": "30e07cf03edc3cd3ef579d0dd4dd8c58250799a5", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", "shasum": "" }, "require": { @@ -1213,7 +1260,7 @@ }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.6.1" + "phpunit/phpunit": "^5.7" }, "type": "library", "extra": { @@ -1259,7 +1306,7 @@ "docblock", "parser" ], - "time": "2016-10-24 11:45:47" + "time": "2017-02-24T16:22:25+00:00" }, { "name": "doctrine/instantiator", @@ -1313,7 +1360,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "doctrine/lexer", @@ -1367,41 +1414,44 @@ "lexer", "parser" ], - "time": "2014-09-09 13:34:57" + "time": "2014-09-09T13:34:57+00:00" }, { "name": "goaop/framework", - "version": "1.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/goaop/framework.git", - "reference": "05b51a6ddc58ace85a31f9d2dc885a6550898fd5" + "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/goaop/framework/zipball/05b51a6ddc58ace85a31f9d2dc885a6550898fd5", - "reference": "05b51a6ddc58ace85a31f9d2dc885a6550898fd5", + "url": "https://api.github.com/repos/goaop/framework/zipball/6e2a0fe13c1943db02a67588cfd27692bddaffa5", + "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5", "shasum": "" }, "require": { - "andrewsville/php-token-reflection": "~1.4", "doctrine/annotations": "~1.0", + "goaop/parser-reflection": "~1.2", "jakubledl/dissect": "~1.0", - "php": ">=5.5.0" + "php": ">=5.6.0" }, "require-dev": { - "symfony/console": "~2.1|~3.0" + "adlawson/vfs": "^0.12", + "doctrine/orm": "^2.5", + "phpunit/phpunit": "^4.8", + "symfony/console": "^2.7|^3.0" }, "suggest": { "symfony/console": "Enables the usage of the command-line tool." }, "bin": [ - "bin/warmup" + "bin/aspect" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1427,70 +1477,130 @@ "library", "php" ], - "time": "2016-05-23 11:19:17" + "time": "2017-07-12T11:46:25+00:00" }, { - "name": "guzzle/guzzle", - "version": "v3.8.1", + "name": "goaop/parser-reflection", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba" + "url": "https://github.com/goaop/parser-reflection.git", + "reference": "adfc38fee63014880932ebcc4810871b8e33edc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba", + "url": "https://api.github.com/repos/goaop/parser-reflection/zipball/adfc38fee63014880932ebcc4810871b8e33edc9", + "reference": "adfc38fee63014880932ebcc4810871b8e33edc9", "shasum": "" }, "require": { - "ext-curl": "*", - "php": ">=5.3.3", - "symfony/event-dispatcher": ">=2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" + "nikic/php-parser": "^1.2|^2.0|^3.0", + "php": ">=5.6.0" }, "require-dev": { - "doctrine/cache": "*", - "monolog/monolog": "1.*", - "phpunit/phpunit": "3.7.*", - "psr/log": "1.0.*", - "symfony/class-loader": "*", - "zendframework/zend-cache": "<2.3", - "zendframework/zend-log": "<2.3" + "phpunit/phpunit": "~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.8-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "psr-0": { - "Guzzle": "src/", - "Guzzle\\Tests": "tests/" + "psr-4": { + "Go\\ParserReflection\\": "src" + }, + "files": [ + "src/bootstrap.php" + ], + "exclude-from-classmap": [ + "/tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Lisachenko", + "email": "lisachenko.it@gmail.com" + } + ], + "description": "Provides reflection information, based on raw source", + "time": "2017-09-03T14:59:13+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+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/", @@ -1502,13 +1612,9 @@ "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" - }, - { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" } ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "description": "Guzzle is a PHP HTTP client library", "homepage": "http://guzzlephp.org/", "keywords": [ "client", @@ -1519,21 +1625,71 @@ "rest", "web service" ], - "abandoned": "guzzlehttp/guzzle", - "time": "2014-01-28 22:29:15" + "time": "2017-06-22T18:50:49+00:00" }, { - "name": "guzzlehttp/psr7", - "version": "1.3.1", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", - "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", + "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": { @@ -1569,75 +1725,23 @@ "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", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ "http", "message", + "request", + "response", "stream", - "uri" + "uri", + "url" ], - "time": "2016-06-24 23:00:38" - }, - { - "name": "henrikbjorn/lurker", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/flint/Lurker.git", - "reference": "712d3ef19bef161daa2ba0e0237c6b875587a089" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/flint/Lurker/zipball/712d3ef19bef161daa2ba0e0237c6b875587a089", - "reference": "712d3ef19bef161daa2ba0e0237c6b875587a089", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/config": "^2.2|^3.0", - "symfony/event-dispatcher": "^2.2|^3.0" - }, - "suggest": { - "ext-inotify": ">=0.1.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Lurker": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Yaroslav Kiliba", - "email": "om.dattaya@gmail.com" - }, - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com" - }, - { - "name": "Henrik Bjrnskov", - "email": "henrik@bjrnskov.dk" - } - ], - "description": "Resource Watcher.", - "keywords": [ - "filesystem", - "resource", - "watching" - ], - "time": "2016-03-16 15:22:20" + "time": "2017-03-20T17:10:46+00:00" }, { "name": "jakubledl/dissect", @@ -1692,41 +1796,44 @@ "parser", "parsing" ], - "time": "2013-01-29 21:29:14" + "time": "2013-01-29T21:29:14+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.5.5", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/399c1f9781e222f6eb6cc238796f5200d1b7f108", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "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", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -1734,7 +1841,7 @@ "object", "object graph" ], - "time": "2016-10-31 17:19:45" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "natxet/CssMin", @@ -1781,7 +1888,58 @@ "css", "minify" ], - "time": "2015-09-25 11:13:11" + "time": "2015-09-25T11:13:11+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v3.1.3", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/579f4ce846734a1cf55d6a531d00ca07a43e3cda", + "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2017-12-26T14:43:21+00:00" }, { "name": "patchwork/jsqueeze", @@ -1828,20 +1986,20 @@ "javascript", "minification" ], - "time": "2016-04-19 09:28:22" + "time": "2016-04-19T09:28:22+00:00" }, { "name": "pear/archive_tar", - "version": "1.4.2", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/pear/Archive_Tar.git", - "reference": "bdd47347df76dbaa89227c5e1afd6f6809985b4c" + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/bdd47347df76dbaa89227c5e1afd6f6809985b4c", - "reference": "bdd47347df76dbaa89227c5e1afd6f6809985b4c", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", "shasum": "" }, "require": { @@ -1894,7 +2052,7 @@ "archive", "tar" ], - "time": "2016-02-25 10:30:39" + "time": "2017-06-11T17:28:11+00:00" }, { "name": "pear/console_getopt", @@ -1941,24 +2099,24 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2015-07-20 20:28:12" + "time": "2015-07-20T20:28:12+00:00" }, { "name": "pear/pear-core-minimal", - "version": "v1.10.1", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "cae0f1ce0cb5bddb611b0a652d322905a65a5896" + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/cae0f1ce0cb5bddb611b0a652d322905a65a5896", - "reference": "cae0f1ce0cb5bddb611b0a652d322905a65a5896", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", "shasum": "" }, "require": { - "pear/console_getopt": "~1.3", + "pear/console_getopt": "~1.4", "pear/pear_exception": "~1.0" }, "replace": { @@ -1985,7 +2143,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2015-10-17 11:41:19" + "time": "2017-02-28T16:46:11+00:00" }, { "name": "pear/pear_exception", @@ -2040,36 +2198,183 @@ "keywords": [ "exception" ], - "time": "2015-02-10 20:07:52" + "time": "2015-02-10T20:07:52+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.6.1", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "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": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "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-10T14:09:06+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", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.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.0" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -2102,39 +2407,39 @@ "spy", "stub" ], - "time": "2016-06-07 08:13:47" + "time": "2017-11-24T13:59:53+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "4.0.2", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d" + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6cba06ff75a1a63a71033e1a01b89056f3af1e8d", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" + "sebastian/version": "^1.0 || ^2.0" }, "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.5.1" }, "type": "library", "extra": { @@ -2165,20 +2470,20 @@ "testing", "xunit" ], - "time": "2016-11-01 05:06:24" + "time": "2017-04-02T07:44:40+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.1", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -2212,7 +2517,7 @@ "filesystem", "iterator" ], - "time": "2015-06-21 13:08:43" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -2253,29 +2558,34 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -2297,20 +2607,20 @@ "keywords": [ "timer" ], - "time": "2016-05-12 18:03:57" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "1.4.8", + "version": "1.4.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", "shasum": "" }, "require": { @@ -2346,20 +2656,20 @@ "keywords": [ "tokenizer" ], - "time": "2015-09-15 10:49:45" + "time": "2017-12-04T08:55:13+00:00" }, { "name": "phpunit/phpunit", - "version": "5.6.3", + "version": "5.7.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a9de0dbafeb6b1391b391fbb034734cb0af9f67c" + "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a9de0dbafeb6b1391b391fbb034734cb0af9f67c", - "reference": "a9de0dbafeb6b1391b391fbb034734cb0af9f67c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd", + "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd", "shasum": "" }, "require": { @@ -2370,21 +2680,21 @@ "ext-xml": "*", "myclabs/deep-copy": "~1.3", "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" + "sebastian/version": "~1.0.3|~2.0", + "symfony/yaml": "~2.1|~3.0|~4.0" }, "conflict": { "phpdocumentor/reflection-docblock": "3.0.2" @@ -2402,7 +2712,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6.x-dev" + "dev-master": "5.7.x-dev" } }, "autoload": { @@ -2428,27 +2738,27 @@ "testing", "xunit" ], - "time": "2016-11-14 06:39:40" + "time": "2017-12-17T06:14:38+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.4.0", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "238d7a2723bce689c79eeac9c7d5e1d623bb9dc2" + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/238d7a2723bce689c79eeac9c7d5e1d623bb9dc2", - "reference": "238d7a2723bce689c79eeac9c7d5e1d623bb9dc2", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.6 || ^7.0", "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2" + "sebastian/exporter": "^1.2 || ^2.0" }, "conflict": { "phpunit/phpunit": "<5.4.0" @@ -2487,7 +2797,7 @@ "mock", "xunit" ], - "time": "2016-10-09 07:01:45" + "time": "2017-06-30T09:13:00+00:00" }, { "name": "psr/http-message", @@ -2537,43 +2847,51 @@ "request", "response" ], - "time": "2016-08-06 14:39:51" + "time": "2016-08-06T14:39:51+00:00" }, { "name": "satooshi/php-coveralls", - "version": "v1.0.1", + "version": "v2.0.0", "source": { "type": "git", - "url": "https://github.com/satooshi/php-coveralls.git", - "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c" + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/da51d304fe8622bf9a6da39a8446e7afd432115c", - "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3eaf7eb689cdf6b86801a3843940d974dc657068", + "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068", "shasum": "" }, "require": { "ext-json": "*", "ext-simplexml": "*", - "guzzle/guzzle": "^2.8|^3.0", - "php": ">=5.3.3", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", "psr/log": "^1.0", - "symfony/config": "^2.1|^3.0", - "symfony/console": "^2.1|^3.0", - "symfony/stopwatch": "^2.0|^3.0", - "symfony/yaml": "^2.0|^3.0" + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" }, "suggest": { "symfony/http-kernel": "Allows Symfony integration" }, "bin": [ - "bin/coveralls" + "bin/php-coveralls" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { "psr-4": { - "Satooshi\\": "src/Satooshi/" + "PhpCoveralls\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2584,38 +2902,55 @@ { "name": "Kitamura Satoshi", "email": "with.no.parachute@gmail.com", - "homepage": "https://www.facebook.com/satooshi.jp" + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" } ], "description": "PHP client library for Coveralls API", - "homepage": "https://github.com/satooshi/php-coveralls", + "homepage": "https://github.com/php-coveralls/php-coveralls", "keywords": [ "ci", "coverage", "github", "test" ], - "time": "2016-01-20 17:35:46" + "time": "2017-12-08T14:28:16+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { @@ -2640,26 +2975,26 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2016-02-13 06:45:14" + "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", - "version": "1.2.0", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "sebastian/exporter": "~1.2 || ~2.0" }, "require-dev": { "phpunit/phpunit": "~4.4" @@ -2704,27 +3039,27 @@ "compare", "equality" ], - "time": "2015-07-26 15:48:44" + "time": "2017-01-29T09:50:25+00:00" }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { @@ -2756,32 +3091,32 @@ "keywords": [ "diff" ], - "time": "2015-12-08 07:14:41" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", - "version": "1.3.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2806,25 +3141,25 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2016-11-26T07:53:53+00:00" }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", "shasum": "" }, "require": { "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "ext-mbstring": "*", @@ -2833,7 +3168,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2873,7 +3208,7 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2016-11-19T08:54:04+00:00" }, { "name": "sebastian/global-state", @@ -2924,25 +3259,25 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "time": "2015-10-12T03:26:01+00:00" }, { "name": "sebastian/object-enumerator", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", "shasum": "" }, "require": { "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "phpunit/phpunit": "~5" @@ -2950,7 +3285,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2970,20 +3305,20 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28 13:25:10" + "time": "2017-02-18T15:18:39+00:00" }, { "name": "sebastian/recursion-context", - "version": "1.0.3", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "79860854756415e1cec8d186c9cf261cafd87dfc" + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/79860854756415e1cec8d186c9cf261cafd87dfc", - "reference": "79860854756415e1cec8d186c9cf261cafd87dfc", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", "shasum": "" }, "require": { @@ -2995,7 +3330,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -3023,7 +3358,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-14 15:54:23" + "time": "2016-11-19T07:33:16+00:00" }, { "name": "sebastian/resource-operations", @@ -3065,20 +3400,20 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28 20:34:47" + "time": "2015-07-28T20:34:47+00:00" }, { "name": "sebastian/version", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { @@ -3108,20 +3443,20 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-02-04 12:56:52" + "time": "2016-10-03T07:35:21+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "2.7.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed" + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", - "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", "shasum": "" }, "require": { @@ -3186,29 +3521,29 @@ "phpcs", "standards" ], - "time": "2016-09-01 23:53:02" + "time": "2017-05-22T02:43:20+00:00" }, { "name": "symfony/browser-kit", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "901319a31c9b3cee7857b4aeeb81b5d64dfa34fc" + "reference": "f761b4ecdd23a451c2cae6fba704d8b207cbb045" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/901319a31c9b3cee7857b4aeeb81b5d64dfa34fc", - "reference": "901319a31c9b3cee7857b4aeeb81b5d64dfa34fc", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f761b4ecdd23a451c2cae6fba704d8b207cbb045", + "reference": "f761b4ecdd23a451c2cae6fba704d8b207cbb045", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/dom-crawler": "~2.8|~3.0" + "php": "^5.5.9|>=7.0.8", + "symfony/dom-crawler": "~2.8|~3.0|~4.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/process": "" @@ -3216,7 +3551,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3243,25 +3578,34 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2017-12-11T22:06:16+00:00" }, { "name": "symfony/config", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "949e7e846743a7f9e46dc50eb639d5fde1f53341" + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/949e7e846743a7f9e46dc50eb639d5fde1f53341", - "reference": "949e7e846743a7f9e46dc50eb639d5fde1f53341", + "url": "https://api.github.com/repos/symfony/config/zipball/e57211b88aa889fefac1cb36866db04100b0f21c", + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/filesystem": "~2.8|~3.0" + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -3269,7 +3613,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3296,29 +3640,29 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2016-09-25 08:27:07" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/css-selector", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "ca809c64072e0fe61c1c7fb3c76cdc32265042ac" + "reference": "eac760b414cf1f64362c3dd047b989e4db121332" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/ca809c64072e0fe61c1c7fb3c76cdc32265042ac", - "reference": "ca809c64072e0fe61c1c7fb3c76cdc32265042ac", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/eac760b414cf1f64362c3dd047b989e4db121332", + "reference": "eac760b414cf1f64362c3dd047b989e4db121332", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3349,28 +3693,28 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/dom-crawler", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "59eee3c76eb89f21857798620ebdad7a05ad14f4" + "reference": "dc847845c66fa68ad4522ed27e62b9b9dd12ab3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/59eee3c76eb89f21857798620ebdad7a05ad14f4", - "reference": "59eee3c76eb89f21857798620ebdad7a05ad14f4", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/dc847845c66fa68ad4522ed27e62b9b9dd12ab3b", + "reference": "dc847845c66fa68ad4522ed27e62b9b9dd12ab3b", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0" + "symfony/css-selector": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/css-selector": "" @@ -3378,7 +3722,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3405,29 +3749,29 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2016-10-18 15:46:07" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1" + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/bb42806b12c5f89db4ebf64af6741afe6d8457e1", - "reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/52510fe1aefdc1c5d2076ac6030421d387e689d1", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3454,38 +3798,39 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" + "time": "2017-11-07T14:28:09+00:00" }, { - "name": "symfony/yaml", - "version": "v3.1.6", + "name": "webmozart/assert", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27" + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Webmozart\\Assert\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3493,17 +3838,17 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2016-10-24 18:41:13" + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" } ], "aliases": [], @@ -3514,5 +3859,8 @@ "platform": { "php": ">=5.5.0" }, - "platform-dev": [] + "platform-dev": [], + "platform-overrides": { + "php": "5.6.3" + } } diff --git a/lib/composer/vendor/consolidation/robo/docs/collections.md b/lib/composer/vendor/consolidation/robo/docs/collections.md deleted file mode 100644 index fc027daa..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/collections.md +++ /dev/null @@ -1,250 +0,0 @@ -# Collection Builders - -Robo provides task collections as a means of making error detection and recovery easier. When Robo tasks are added to a collection, their execution is deferred until the `$collection->run()` method is called. If one of the tasks fail, then the operation will be aborted; rollback tasks may also be defined to restore the system to its original condition. - -When using collections, a Robo script will go through three phases: - -1. Determine which tasks will need to be run, and create a task builder. - - Assign values to variables. - - Do not alter the state of the system. -2. Create the necessary tasks via the task builder. - - Use variables calculated in the first phase in task parameters. -3. Run the tasks via the `run()` method. - - Check and report errors once after `run()` returns. - -Following this pattern will keep your code linear and easy to understand. - -## Collections API - -Collections are made up of a combination of tasks and/or `callable` functions / method pointers, such as: - - - A task (implements TaskInterface) - - A function name (string) - - A closure (inline function) - - A method reference (array with object and method name) - -Examples of adding different kinds of tasks to a collection are provided below. - -### TaskInterface Objects - -```php -add( - $this->taskExec('ls') - ); -?> -``` - -### Functions - -```php -addCode('mytaskfunction'); -?> -``` - -### Closures - -```php -addCode( - function() use ($work) - { - // do something with $work - }); -?> -``` - -### Methods - -```php -addCode([$myobject, 'mymethod']); -?> -``` - -## Using a Collection Builder - -To manage a collection of tasks, a collection builder. Collection builders allow tasks to be created via chained methods. All of the tasks created by the same builder are added to a collection; when the `run()` method is called, all of the tasks in the collection run. - -The 'publish' command from Robo's own RoboFile is shown below. It uses a collection builder to run some git and filesystem operations. The "completion" tasks are run after all other tasks complete, or during rollback processing when an operation fails. - -``` php -collectionBuilder(); - $collection->taskGitStack() - ->checkout('site') - ->merge('master') - ->completion($this->taskGitStack()->checkout($current_branch)) - ->taskFilesystemStack() - ->copy('CHANGELOG.md', 'docs/changelog.md') - ->completion($this->taskFilesystemStack()->remove('docs/changelog.md')) - ->taskExec('mkdocs gh-deploy'); - - return $collection; - } -} -?> -``` - -The example above also adds a couple of tasks as "completions"; these are run when the collection completes execution, as explained below. - -## Rollbacks and Completions - -Robo also provides rollbacks and completions, special tasks that are eligible to run only if all of the tasks added to the collection before them succeed. The section below explains the circumstances under which these tasks will run. - -### Completion Tasks - -Completions run whenever their collection completes or fails, but only if all of the tasks that come before it succeed. An example of this is shown in the first example above. A filesystem stack task copies CHANDELOG.md to docs/changelog.md; after this task is added to the collection, another filesystem stack task is added as a completion to delete docs/changelog.md. This is done because docs/changelog.md is only intended to exist long enough to be used by the `mkdocs` task, which is added later. - -### Rollback Tasks - -In addition to completions, Robo also supports rollbacks. Rollback tasks can be used to clean up after failures, so the state of the system does not change when execution is interrupted by an error. A rollback task is executed if all of the tasks that come before it succeed, and at least one of the tasks that come after it fails. If all tasks succeed, then no rollback tasks are executed. - -### Rollback and Completion Methods - -Any task may also implement \Robo\Contract\RollbackInterface; if this is done, then its `rollback()` method will be called if the task is `run()` on a collection that later fails. - -Use `addAsCompletion($collection)` in place of `addAsRollback($collection)`, or implement \Robo\Contract\CompletionInterface. Completions otherwise work exactly like rollbacks. - -## Temporary Objects - -Since the concept of temporary objects that are cleaned up on failure is a common pattern, Robo provides built-in support for them. Temporary directories and files are provided out of the box; other kinds of temporary objects can be easily created using the Temporary global collection. - -### Temporary Directories - -It is recommended that operations that perform multiple filesystem operations should, whenever possible, do most of their work in a temporary directory. Temporary directories are created by `$this->taskTmpDir()`, and are automatically be removed when the collection completes or rolls back. As an added convenience, the CollectionBuilder class has a `tmpDir()` method that creates a temporary directory via `taskTmpDir()`, and then returns the path to the temporary directory. - -``` php -collectionBuilder(); - - // Create a temporary directory, and fetch its path. - $work = $collection->tmpDir(); - - $collection - ->taskWriteToFile("$work/README.md") - ->line('-----') - ->line(date('Y-m-d').' Generated file: do not edit.') - ->line('----'); - - // If all of the preceding tasks succeed, then rename the temporary - // directory to its final name. - $collection->taskFilesystemStack() - ->rename($work, 'destination'); - - return $collection->run(); - } -} -?> -``` - -In the previous example, the path to the temporary directory is stored in the variable `$work`, and is passed as needed to the parameters of the other tasks as they are added to the collection. After the task collection is run, the temporary directory will be automatically deleted. In the example above, the temporary directory is renamed by the last task in the collection. This allows the working directory to persist; the collection will still attempt to remove the working directory, but no errors will be thrown if it no longer exists in its original location. Following this pattern allows Robo scripts to easily and safely do work that cleans up after itself on failure, without introducing a lot of branching or additional error recovery code. This paradigm is common enough to warrant a shortcut method of accomplishing the same thing. The example below is identical to the one above, save for the fact that it uses the `workDir()` method instead of `tmpDir()`. `workDir()` renames the temporary directory to its final name if the collection completes; any directory that exists in the same location will be overwritten at that time, but will persist if the collection roles back. - -``` php -collectionBuilder(); - - // Create a temporary directory, and fetch its path. - // If all of the tasks succeed, then rename the temporary directory - // to its final name. - $work = $collection->workDir('destination'); - - $collection - ->taskWriteToFile("$work/README.md") - ->line('-----') - ->line(date('Y-m-d').' Generated file: do not edit.') - ->line('----'); - - return $collection->run(); - } -} -?> -``` - -Temporary directories may also be created via the shortcut `$this->_tmpDir();`. Temporary directories created in this way are deleted when the script terminates. - -### Temporary Files - -Robo also provides an API for creating temporary files. They may be created via `$this->taskTmpFile()`; they are used exactly like `$this->taskWrite()`, except they are given a random name on creation, and are deleted when their collection completes. If they are not added to a collection, then they are deleted when the script terminates. - -### The Temporary Global Collection - -Robo maintains a special collection called the Temporary global collection. This collection is used to keep track of temporary objects that are not part of any collection. For example, Robo temporary directories and temporary files are managed by the Temporary global collection. These temporary objects are cleaned up automatically when the script terminates. - -It is easy to create your own temporary tasks that behave in the same way as the provided temporary directory and temporary file tasks. There are two steps required: - -- Implement \Robo\Contract\CompletionInterface -- Wrap the task via Temporary::wrap() - -For example, the implementation of taskTmpFile() looks like this: - -``` php - -``` - -The `complete()` method of the task will be called once the Collection the temporary object is attached to finishes running. If the temporary is not added to a collection, then its `complete()` method will be called when the script terminates. - -## Named Tasks - -It is also possible to provide names for the tasks added to a collection. This has two primary benefits: - -1. Any result data returned from a named task is stored in the Result object under the task name. -2. It is possible for other code to add more tasks before or after any named task. - -This feature is useful if you have functions that create task collections, and return them as a function results. The original caller can then use the `$collection->before()` or `$collection->after()` to insert sequenced tasks into the set of operations to be performed. One reason this might be done would be to define a base set of operations to perform (e.g. in a deploy), and then apply modifications for other environments (e.g. dev or stage). - -```php -addCode( - function() use ($work) - { - // do something with $work - }, - "taskname"); -?> -``` - -Given a collection with named tasks, it is possible to insert more tasks before or after a task of a given name. - -```php -after("taskname", - function() use ($work) - { - // do something with $work after "taskname" executes, if it succeeds. - }); -?> -``` - -```php -before("taskname", - function() use ($work) - { - // do something with $work before "taskname" executes. - }); -?> -``` - -It is recommended that named tasks be avoided unless specifically needed. - diff --git a/lib/composer/vendor/consolidation/robo/docs/extending.md b/lib/composer/vendor/consolidation/robo/docs/extending.md deleted file mode 100644 index c71b7bc8..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/extending.md +++ /dev/null @@ -1,191 +0,0 @@ -# Extending - -Robo tasks can be added to your Robo application by using Composer to suppliment the set of built-in tasks that Robo provides by default. To find existing Robo task extensions, search in Packagist for projects of type [robo-tasks](https://packagist.org/search/?type=robo-tasks). - -The convention used to add new tasks for use in your RoboFiles is to create a wrapper trait named `loadTasks` that instantiates the implementation class for each task. Each task method in the trait should start with the prefix `task`, and should use **chained method calls** for configuration. Task execution should be triggered by the method `run`. - -To include additional tasks in your RoboFile, you must `use` the appropriate `loadTasks` in your RoboFile. See the section [Including Additional Tasks](#including-additional-tasks) below. To create your own Robo extension that provides tasks for use in RoboFiles, then you must write your own class that implements TaskInterface, and create a `loadTasks` trait for it as described in the section [Creating a Robo Extension](#creating-a-robo-extension). - -## Including Additional Tasks - -Additional tasks may be installed into projects that have included Robo via Composer. For example: -``` -$ cd myproject -$ composer require boedah/robo-drush -``` -If any of the tasks you include require external Composer projects themselves, then you must `composer require` these as well. See the `suggests` section of Robo's composer.json file for a list of some projects you might need to require. - -Once the extension you wish to use has been added to your vendor directory, you may then include it from your RoboFile: -``` php -class RoboFile extends \Robo\Tasks -{ - use \Boedah\Robo\Task\Drush\loadTasks; - - public function test() - { - // ... - } -} -``` -Once you have done this, all of the tasks defined in the extension you selected will be available for use in your commands. - -Note that at the moment, it is not possible to extend Robo when using the robo.phar. This capability may be added in the future via [embedded composer](https://github.com/dflydev/dflydev-embedded-composer). - -## Creating a Robo Extension - -A Robo tasks extension is created by advertising a Composer package of type `robo-tasks` on [Packagist](https://packagist.org/). For an overview on how this is done, see the article [Creating your very own Composer Package](https://knpuniversity.com/screencast/question-answer-day/create-composer-package). Specific instructions for creating Robo task extensions are provided below. - -### Create your composer.json File - -Your composer.json file should look something like the example below: -``` -{ - "name": "boedah/robo-drush", - "description": "Drush CommandStack for Robo Task Runner", - "type": "robo-tasks", - "autoload": { - "psr-4": { - "Boedah\\Robo\\Task\\Drush\\": "src" - } - }, - "require": { - "php": ">=5.5.0", - "consolidation/robo": "~1" - } -} -``` -Customize the name and autoload paths as necessary, and add any additional required projects needed by the tasks that your extensions will provide. The type of your project should always be `robo-tasks`. Robo only supports php >= 5.5.0; you may require a higher version of php if necessary. - -### Create the loadTasks.php Trait - -It is recommended to place your trait-loading task in a `loadTasks` file in the same namespace as the task implementation. -``` -namespace Boedah\Robo\Task\Drush; - -use Robo\Container\SimpleServiceProvider; - -trait loadTasks -{ - /** - * @param string $pathToDrush - * @return DrushStack - */ - protected function taskDrushStack($pathToDrush = 'drush') - { - return $this->task(__FUNCTION__, $pathToDrush); - } -} -``` -Note that the name of the service for a given task must start with the word "task", and must have the same name as the function used to call the task. `$this->task()` looks up the service by name; using the PHP built-in constant __FUNCTION__ for this parameter ensures that the names of these items remain in alignment. - -### Task implementation - -The implementation of each task class should extend \Robo\Task\BaseTask, or some class that extends the same, and should used chained initializer methods and defer all operations that alter the state of the system until its `run()` method. If you follow these patterns, then your task extensions will be usable via Robo collection builders, as explained in the [collections](collections.md) documentation. - -There are many examples of task implementations in the Robo\Task namespace. A very basic task example is provided below. The namespace is `MyAssetTasks`, and the example task is `CompileAssets`. To customize to your purposes, choose an appropriate namespace, and then define as many tasks as you need. - -``` php -task(CompileAssets::class, $path); - } -} - -class CompileAssets implements \Robo\Contract\TaskInterface -{ - // configuration params - protected $path; - protected $to; - function __construct($path) - { - $this->path = $path; - } - - function to($filename) - { - $this->to = $filename; - // must return $this - return $this; - } - - // must implement Run - function run() - { - //.... - } -} -?> -``` - -To use the tasks you define in a RoboFile, use its `loadTasks` trait as explained in the section [Including Additional Tasks](#including-additional-tasks), above. - -### TaskIO - -To allow tasks access IO, use the `Robo\Common\TaskIO` trait, or inherit your task class from `Robo\Task\BaseTask` (recommended). - -Inside tasks you should print process details with `printTaskInfo`, `printTaskSuccess`, and `printTaskError`. -``` -$this->printTaskInfo('Processing...'); -``` -The Task IO methods send all output through a PSR-3 logger. Tasks should use task IO exclusively; methods such as 'say' and 'ask' should reside in the command method. This allows tasks to be usable in any context that has a PSR-3 logger, including background or server processes where it is not possible to directly query the user. - -### Tasks That Use Tasks - -If one task implementation needs to use other tasks while it is running, it should do so via a `CollectionBuilder` object, as explained in the [Collections](collections.md) documentation. - -To obtain access to a `CollectionBuilder`, a task should implement `BuilderAwareInterface` and use `BuilderAwareTrait`. It will then have access to a collection builder via the `$this->collectionBuilder()` method. - -### Testing Extensions - -If you wish to use the `task()` methods from your `loadTasks` trait in your unit tests, it is necessary to also use the Robo `TaskAccessor` trait, and define a `collectionBuilder()` method to provide a builder. Collection builders are used to initialize all Robo tasks. The easiest way to get a usable collection builder in your tests is to initialize Robo's default dependency injection container, and use it to request a new builder. - -An example of how to do this in a PHPUnit test is shown below. -``` -use League\Container\ContainerAwareInterface; -use League\Container\ContainerAwareTrait; -use Symfony\Component\Console\Output\NullOutput; -use Robo\TaskAccessor; -use Robo\Robo; - -class DrushStackTest extends \PHPUnit_Framework_TestCase implements ContainerAwareInterface -{ - use \Boedah\Robo\Task\Drush\loadTasks; - use TaskAccessor; - use ContainerAwareTrait; - - // Set up the Robo container so that we can create tasks in our tests. - function setup() - { - $container = Robo::createDefaultContainer(null, new NullOutput()); - $this->setContainer($container); - } - - // Scaffold the collection builder - public function collectionBuilder() - { - $emptyRobofile = new \Robo\Tasks; - return $this->getContainer()->get('collectionBuilder', [$emptyRobofile]); - } - - public function testYesIsAssumed() - { - $command = $this->taskDrushStack() - ->drush('command') - ->getCommand(); - $this->assertEquals('drush command -y', $command); - } -} -``` -To assert that the output of a command contains some value, use a `Symfony\Component\Console\Output\BufferedOutput` in place of null output when calling Robo::createDefaultContainer(). diff --git a/lib/composer/vendor/consolidation/robo/docs/framework.md b/lib/composer/vendor/consolidation/robo/docs/framework.md deleted file mode 100644 index d0ae942f..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/framework.md +++ /dev/null @@ -1,89 +0,0 @@ -# Robo as a Framework - -There are multiple ways to use and package Robo scripts; a few of the alternatives are presented below. - -## Creating a Standalone Phar with Robo - -It is possible to create a standalone phar that is implemented with Robo; doing this does not require the RoboFile to be located in the current working directory, or any particular location within your project. To achieve this, first set up your project as shown in the section [Implementing Composer Scripts with Robo](getting-started.md#implementing-composer-scripts-with-robo). Use of the "scripts" section is optional. - -Next, add an "autoload" section to your composer.json to provide a namespace for your Robo commands: -``` -{ - "name": "myorg/myproject", - "require": { - "consolidation/Robo": "~1" - }, - "autoload":{ - "psr-4":{ - "MyProject\\":"src" - } - } -} -``` -Create a new file for your Robo commands, e.g. `class RoboFile` in `namespace MyProject\Commands;` in the file `src\Commands\RoboFile.php`. Optionally, add more task libraries as described in the [extending](extending.md) document. - -Create a startup script similar to the one below, and add it to the root of your project, or some other location of your choosing: - -``` php -#!/usr/bin/env php -setSearchPattern('*Command.php'); -$commandClasses = $discovery->discover('php/MyProject/Commands', '\MyProject\Commands'); -``` -Pass the resulting `$commandClasses` to the `Runner()` constructor as shown above. See the annotated-commands project for more information about the different options that the discovery command takes. - -## Using Your Own Dependency Injection Container with Robo (Advanced) - -It is also possible to completely replace the Robo application with your own. To do this, set up your project as described in the sections above, but replace the Robo runner with your own main event loop. - -Create the Robo dependency injection container: -``` -use League\Container\Container; - -$input = new \Symfony\Component\Console\Input\ArgvInput($argv); -$output = new \Symfony\Component\Console\Output\ConsoleOutput(); -$conf = new \Robo\Config(); \\ or use your own subclass -$app = new \My\Application(); -$container = \Robo\Robo::createDefaultContainer($input, $output, $app, $conf); -``` -If you are using League\Container (recommended), then you may simply add and share your own classes to the same container. If you are using some other DI container, then you should use [delegate lookup](https://github.com/container-interop/fig-standards/blob/master/proposed/container.md#14-additional-feature-delegate-lookup) to combine them. diff --git a/lib/composer/vendor/consolidation/robo/docs/getting-started.md b/lib/composer/vendor/consolidation/robo/docs/getting-started.md deleted file mode 100644 index 673f688d..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/getting-started.md +++ /dev/null @@ -1,418 +0,0 @@ -# Getting Started - -To begin you need to create a RoboFile. Just run `robo init` in your project directory: - -``` -cd myproject -robo init -``` - -Your project directory may start out empty; Robo will create a new `RoboFile.php` for you. There will be RoboFile class which extends `\Robo\Tasks`, which includes all bundled tasks of Robo. - -``` php - -``` - -## Commands - -All public methods of the RoboFile class will be treated as **commands**. You can run them from the CLI and pass arguments. - -``` php -say("Hello, $world"); - } -} -?> -``` - -When we run: - -``` -robo hello davert -➜ Hello, davert -``` - -Method names should be camelCased. In CLI `camelCased` method will be available as `camel:cased` command. -`longCamelCased` method will be transformed to `long:camel-cased` command. - -**Note:** This assumes you have installed Robo by downloading the [robo.phar](http://robo.li/robo.phar) file and copied it to a directory in your $PATH. For example, `cp robo.phar ~/bin/robo`. - -### Arguments - -All method parameters without default values are treated as required arguments. In our example command `hello` requires one argument. -If you pass a default value to parameter the argument becomes optional: - -``` php -say("Hello, $world"); - } -?> -``` - -``` -robo hello -➜ Hello, world -``` - -To accept multiple, variable arguments, define a parameter as an `array`; Robo will then pass all CLI arguments in this variable: - -``` php -say("Hello, " . implode(', ', $world)); - } -?> -``` - -``` -robo hello davert jon bill bob -➜ Hello, davert, jon, bill, bob -``` - -### Options - -To define command options you should define the last method parameter as an associative array where the keys define the option names and the values provide each option's default values: - -``` php - false]) - { - if (!$opts['silent']) $this->say("Hello, world"); - } -?> -``` - -``` -robo hello -➜ Hello, world - -robo hello --silent -``` - -A one-character shortcut can be specified for option: - -``` php - false]) - { - if (!$opts['silent']) $this->say("Hello, world"); - } -?> -``` - -Now command can be executed with '-s' to run in silent mode: - -``` -robo hello -s -``` - -### Load From Other Directories - -Robo can execute commands from a RoboFile located in different directory. -You can specify the path to another RoboFile by including the `--load-from` option: - -``` -robo run --load-from /path/to/my/other/project -``` - -### Pass-Through Arguments - -Sometimes you need to pass arguments from your command into a task. A command line after the `--` characters is treated as one argument. -Any special character like `-` will be passed into without change. - -``` php -taskExec('ls')->args($args)->run(); - } -?> -``` - -``` -robo ls -- Robo -c --all - [Robo\Task\ExecTask] running ls Robo -c --all - . .. CHANGELOG.md codeception.yml composer.json composer.lock docs .git .gitignore .idea LICENSE README.md robo RoboFile.php robo.phar src tests .travis.yml vendor -``` - -### Help - -The help text for a command in a RoboFile may be provided in Doc-Block comments. An example help Doc-Block comment is shown below: - -``` php - false]) -{ -} -?> -``` - -The corresponding help text produced is: - -``` -robo fibonacci --help -Usage: - fibonacci [--graphic] start steps - -Arguments: - start Number to start from - steps Number of steps to perform - -Options: - --graphic Display the sequence graphically using cube representation - -Help: - Graphic output will look like - +----+---+-------------+ - | | | | - | |-+-| | - |----+-+-+ | - | | | - | | | - | | | - +--------+-------------+ -``` - -Arguments and options are populated from annotations. - -Initially added with [PR by @jonsa](https://github.com/consolidation/Robo/pull/71); now provided by the [consolidation/annotated-command](https://github.com/consolidation/annotated-command) project, which was factored out from Robo. - -### Ignored methods - -Robo ignores any method of your RoboFile that begins with `get` or `set`. These methods are presumed to be data accessors, not commands. To implement a command whose name contains `get` or `set`, use the `@command` annotation. - -``` php - -``` - -## Tasks - -Robo commands typically divide the work they need to accomplish into **tasks**. The command first determines what needs to be done, inspecting current state if necessary, and then sets up and executes one or more tasks that make the actual changes needed by the command. (See also the documentation on [Collections](collections.md), which allow you to combine groups of tasks which can provide rollback functions to recover from failure situations.) - -For details on how to add custom tasks to Robo, see the [extending](extending.md) document. - -### Shortcuts - -Some tasks may have shortcuts. If a task does not require multi-step configuration, it can be executed with a single line: - -```php -_exec('ps aux'); -$this->_copy('config/env.example.yml','config/env.yml'); -?> -``` - -### Result - -Each task must return an instance of `Robo\Result`. A Robo Result contains the task instance, exit code, message, and any variable data that the task may wish to return. - -The `run` method of `CompileAssets` class may look like this: - -``` -return new Robo\Result($this, $exitCode, "Assets compiled"); -``` - -or - -``` -return Robo\Result::success($this, "Assets compiled"); -return Robo\Result::error($this, "Failed to compile assets"); -``` - -You can use this results to check if execution was successful, either using the `wasSuccessful()` method, or via the `invoke` shortcut. We will use the `Exec` task in next example to illustrate this: - -``` php -_exec('phpunit tests/integration'); - $res2 = $this->_exec('phpunit tests/unit'); - - // print message when tests passed - if ($res1->wasSuccessful() and $res2->wasSuccessful()) $this->say("All tests passed"); - } -} -?> -``` -When making multi-step commands that call one task after another, it is best to use a collection to group the tasks together. The collection will handle error detection and rollback, and will return a single Result object when done. For more information, see the [Collections](collections.md) documentation. - -Some tasks may also attach data to the Result object. If this is done, the data may be accessed as an array; for example, `$result['path'];`. This is not common. - -Commands should return a Result object obtained from a task; this will ensure that the command exit code is set correctly. If a command does not have a Result object available, then it may use a ResultData object. ResultData objects are just like Result objects, except the do not contain a reference to a task. - -return new Robo\ResultData($exitcode, 'Error message.'); - -If the command returns a TaskInterface instead of a result, then the task will be executed, and the result from that task will be used as the final result of the command. See also `Formatters`, below. - -### Stack - -Some tasks contain `Stack` in their name. These are called "stack" tasks, and they execute similar tasks one after the other. Each of the primary methods in a stack class executes an operation. - -Stack tasks also contain a `stopOnFail` method which can be used to stop task execution if one of its commands was unsuccessful. - -### Global StopOnFail - -There is a global `stopOnFail` method as well, that can be used to stop a command on first failure of a task. - -``` -$this->stopOnFail(true); -``` - -### IO - -As you noticed, you can print text via the `say` method, which is taken from the `Robo\Output` trait. - -``` -$this->say("Hello"); -``` - -Also, you can ask for input from console: - -``` -$name = $this->ask("What is your name?"); -``` - -There are also `askDefault`, `askHidden`, and `confirm` methods. - -In addition, Robo makes all of the methods of Symfony Style available throgh the `io()` method: - -$this->io()->title("Build all site assets"); - -This allows Robo scripts to follow the [Symfony Console Style Guide](http://symfony.com/blog/new-in-symfony-2-8-console-style-guide) if desired. - -### Formatters - -It is preferable for commands that look up and display information should avoid doing IO directly, and should instead return the data they wish to display as an array. This data can then be converted into different data formats, such as "table" and "json". The user may select which formatter to use via the --format option. For details on formatters, see the [consolidation/output-formatters](https://github.com/consolidation/output-formatters) project. - -### Progress - -Robo supports progress indicators via the Symfony ProgressBar class. Long-running tasks that wish to display the progress indicator may do so via four simple steps: - -- Override the `progressIndicatorSteps()` method and return the number of "steps" in the operation. -- Call `$this->startProgressIndicator()` to begin the progress indicator running. -- Call `$this->advanceProgressIndicator()` a number of times equal to the result returned by `progressIndicatorSteps()` -- Call `$this->stopProgressIndicator()` when the operation is completed. - -An example of this is shown below: - -``` php -steps; - } - - public function run() - { - $exitCode = 0; - $errorMessage = ""; - - $this->startProgressIndicator(); - for ($i = 0; $i < $this->steps; ++$i) { - $this->advanceProgressIndicator(); - } - $this->stopProgressIndicator(); - - return new Result($this, $exitCode, $errorMessage, ['time' => $this->getExecutionTime()]); - } -} -?> -``` -Tasks should not attempt to use a specific progress indicator (e.g. the Symfony ProgressBar class) directly, as the ProgressIndicatorAwareTrait allows for an appropriate progress indicator to be used (or omitted) as best suits the application. - -Note that when using [Collections](collections.md), the progress bar will automatically be shown if the collection takes longer than two seconds to run. Each task in the collection will count for one "step"; if the task supports progress indicators as shown above, then it will add an additional number of steps as indicated by its `progressIndicatorSteps()` method. - -## Working with Composer - -### Adding a RoboFile to your Project - -Robo is designed to work well with Composer. To use Robo scripts in your Composer-based project, simply add `robo` to your composer.json file: -``` -$ cd myproject -$ composer require consolidation/Robo:~1 -$ ./vendor/bin/robo mycommand -``` -If you do not want to type the whole path to Robo, you may add `./vendor/bin` to your $PATH (relative paths work), or use `composer exec` to find and run Robo: -``` -$ composer exec robo mycommand -``` - -### Implementing Composer Scripts with Robo - -When using Robo in your project, it is convenient to define Composer scripts that call your Robo commands. Simply add the following to your composer.json file: -``` -{ - "name": "myorg/myproject", - "require": { - "consolidation/Robo": "~1" - }, - "scripts": { - "test": "composer robo test", - "phar": "composer robo phar:build", - "robo": "robo --ansi --load-from $(pwd)/scripts/BuildCommands.php" - } -} -``` -*Note*: When you include Robo as a library like this, some external projects used by certain core Robo tasks are not automatically included in your project. See the `"suggest":` section of Robo's composer.json for a list of external projects you might also want to require in your project. - -Once you have set up your composer.json file (and ran `composer update` if you manually changed the `require` or `require-dev` sections), Composer will ensure that your project-local copy of Robo in the `vendor/bin` dir is in your $PATH when you run the additional Composer scripts that you declared: -``` -$ cd myproject -$ composer test -$ composer phar -``` -This will call the public methods `test()` and `phar()` in your RoboFile.php when using `composer test` and `composer phar`, respectively. - -Advertising your build commands as Composer scripts is a useful way to provide the key commands used for testing, building or packaging your application. Also, if your application should happen to provide a commandline tool to perform the operations of the application itself, then defining your build commands in their own RoboFile provides desirable separation, keeping your build commands out of the help and list commands of your primary script. - -If you would like to simplify the output of your script (e.g. when running on a CI service), replace the `--ansi` option in the example above with `--no-ansi`, and colored terminal output and progress bars will be disabled. - -## Robo as a Framework - -For an overview on how to turn your Robo scripts into standalone tools, see the example [robo.script](https://github.com/consolidation/Robo/blob/master/examples/robo.script), and the section [Robo as a Framework](framework.md). diff --git a/lib/composer/vendor/consolidation/robo/docs/index.md b/lib/composer/vendor/consolidation/robo/docs/index.md deleted file mode 100644 index cdb6d099..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/index.md +++ /dev/null @@ -1,24 +0,0 @@ -# Robo Documentation - -* [Getting Started](getting-started.md) -* [Collections](collections.md) -* [Extending](extending.md) -* [Robo as a Framework](framework.md) - -## Tasks - -* [ApiGen](tasks/ApiGen.md) -* [Archive](tasks/Archive.md) -* [Assets](tasks/Assets.md) -* [Base](tasks/Base.md) -* [Bower](tasks/Bower.md) -* [Composer](tasks/Composer.md) -* [Development](tasks/Development.md) -* [Docker](tasks/Docker.md) -* [File](tasks/File.md) -* [Filesystem](tasks/Filesystem.md) -* [Gulp](tasks/Gulp.md) -* [Npm](tasks/Npm.md) -* [Remote](tasks/Remote.md) -* [Testing](tasks/Testing.md) -* [Vcs](tasks/Vcs.md) diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/ApiGen.md b/lib/composer/vendor/consolidation/robo/docs/tasks/ApiGen.md deleted file mode 100644 index 255404b8..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/ApiGen.md +++ /dev/null @@ -1,56 +0,0 @@ -# ApiGen Tasks -## ApiGen - - -Executes ApiGen command to generate documentation - -``` php -taskApiGen('./apigen.neon') - ->templateConfig('vendor/apigen/apigen/templates/bootstrap/config.neon') - ->wipeout(true) - ->run(); -?> -``` - -* `config($config)` * `param string` $config -* `source($src)` * `param array|string|Traversable` $src one or more source values -* `destination($dest)` * `param string` $dest -* `extensions($exts)` * `param array|string` $exts one or more extensions -* `exclude($exclude)` * `param array|string` $exclude one or more exclusions -* `skipDocPath($path)` * `param array|string|Traversable` $path one or more skip-doc-path values -* `skipDocPrefix($prefix)` * `param array|string|Traversable` $prefix one or more skip-doc-prefix values -* `charset($charset)` * `param array|string` $charset one or more charsets -* `mainProjectNamePrefix($name)` * `param string` $name -* `title($title)` * `param string` $title -* `baseUrl($baseUrl)` * `param string` $baseUrl -* `googleCseId($id)` * `param string` $id -* `googleAnalytics($trackingCode)` * `param string` $trackingCode -* `templateConfig($templateConfig)` * `param mixed` $templateConfig -* `allowedHtml($tags)` * `param array|string` $tags one or more supported html tags -* `groups($groups)` * `param string` $groups -* `autocomplete($types)` * `param array|string` $types or more supported autocomplete types -* `accessLevels($levels)` * `param array|string` $levels one or more access levels -* `internal($internal)` * `param boolean|string` $internal 'yes' or true if internal, 'no' or false if not -* `php($php)` * `param boolean|string` $php 'yes' or true to generate documentation for internal php classes, -* `tree($tree)` * `param bool|string` $tree 'yes' or true to generate a tree view of classes, 'no' or false otherwise -* `deprecated($dep)` * `param bool|string` $dep 'yes' or true to generate documentation for deprecated classes, 'no' or false otherwise -* `todo($todo)` * `param bool|string` $todo 'yes' or true to document tasks, 'no' or false otherwise -* `sourceCode($src)` * `param bool|string` $src 'yes' or true to generate highlighted source code, 'no' or false otherwise -* `download($zipped)` * `param bool|string` $zipped 'yes' or true to generate downloadable documentation, 'no' or false otherwise -* `report($path)` -* `wipeout($wipeout)` * `param bool|string` $wipeout 'yes' or true to clear out the destination directory, 'no' or false otherwise -* `quiet($quiet)` * `param bool|string` $quiet 'yes' or true for quiet, 'no' or false otherwise -* `progressbar($bar)` * `param bool|string` $bar 'yes' or true to display a progress bar, 'no' or false otherwise -* `colors($colors)` * `param bool|string` $colors 'yes' or true colorize the output, 'no' or false otherwise -* `updateCheck($check)` * `param bool|string` $check 'yes' or true to check for updates, 'no' or false otherwise -* `debug($debug)` * `param bool|string` $debug 'yes' or true to enable debug mode, 'no' or false otherwise -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Archive.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Archive.md deleted file mode 100644 index 103845d2..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Archive.md +++ /dev/null @@ -1,52 +0,0 @@ -# Archive Tasks -## Extract - - -Extracts an archive. - -Note that often, distributions are packaged in tar or zip archives -where the topmost folder may contain variable information, such as -the release date, or the version of the package. This information -is very useful when unpacking by hand, but arbitrarily-named directories -are much less useful to scripts. Therefore, by default, Extract will -remove the top-level directory, and instead store all extracted files -into the directory specified by $archivePath. - -To keep the top-level directory when extracting, use -`preserveTopDirectory(true)`. - -``` php -taskExtract($archivePath) - ->to($destination) - ->preserveTopDirectory(false) // the default - ->run(); -?> -``` - -* `to(string)` location to store extracted files - -* `to($to)` Location to store extracted files. -* `preserveTopDirectory($preserve = null)` * `param bool` $preserve - -## Pack - - -Creates a zip or tar archive. - -``` php -taskPack( -) -->add('README') // Puts file 'README' in archive at the root -->add('project') // Puts entire contents of directory 'project' in archinve inside 'project' -->addFile('dir/file.txt', 'file.txt') // Takes 'file.txt' from cwd and puts it in archive inside 'dir'. -->run(); -?> -``` - -* `archiveFile($archiveFile)` * `param string` $archiveFile -* `addFile($placementLocation, $filesystemLocation)` Add an item to the archive. Like file_exists(), the parameter -* `addDir($placementLocation, $filesystemLocation)` Alias for addFile, in case anyone has angst about using -* `add($item)` Add a file or directory, or list of same to the archive. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Assets.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Assets.md deleted file mode 100644 index 54fc2110..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Assets.md +++ /dev/null @@ -1,163 +0,0 @@ -# Assets Tasks - -## ImageMinify - - -Minifies images. When the required minifier is not installed on the system -the task will try to download it from the [imagemin](https://github.com/imagemin) repository. - -When the task is run without any specified minifier it will compress the images -based on the extension. - -```php -$this->taskImageMinify('assets/images/*') - ->to('dist/images/') - ->run(); -``` - -This will use the following minifiers: - -- PNG: optipng -- GIF: gifsicle -- JPG, JPEG: jpegtran -- SVG: svgo - -When the minifier is specified the task will use that for all the input files. In that case -it is useful to filter the files with the extension: - -```php -$this->taskImageMinify('assets/images/*.png') - ->to('dist/images/') - ->minifier('pngcrush'); - ->run(); -``` - -The task supports the following minifiers: - -- optipng -- pngquant -- advpng -- pngout -- zopflipng -- pngcrush -- gifsicle -- jpegoptim -- jpeg-recompress -- jpegtran -- svgo (only minification, no downloading) - -You can also specifiy extra options for the minifiers: - -```php -$this->taskImageMinify('assets/images/*.jpg') - ->to('dist/images/') - ->minifier('jpegtran', ['-progressive' => null, '-copy' => 'none']) - ->run(); -``` - -This will execute as: -`jpegtran -copy none -progressive -optimize -outfile "dist/images/test.jpg" "/var/www/test/assets/images/test.jpg"` - -* `to($target)` Sets the target directory where the files will be copied to. -* `minifier($minifier, array $options = Array ( ) )` Sets the minifier. - -## Less - - -Compiles less files. - -```php -taskLess([ - 'less/default.less' => 'css/default.css' -]) -->run(); -?> -``` - -Use one of both less compilers in your project: - -``` -"leafo/lessphp": "~0.5", -"oyejorge/less.php": "~1.5" -``` - -Specify directory (string or array) for less imports lookup: - -```php -taskLess([ - 'less/default.less' => 'css/default.css' -]) -->importDir('less') -->compiler('lessphp') -->run(); -?> -``` - -You can implement additional compilers by extending this task and adding a -method named after them and overloading the lessCompilers() method to -inject the name there. - -* `importDir($dirs)` Sets import directories -* `addImportPath($dir)` Adds import directory -* `setImportPaths($dirs)` Sets import directories -* `setFormatter($formatterName)` * `param string` $formatterName -* `compiler($compiler, array $options = Array ( ) )` Sets the compiler. - -## Minify - - -Minifies asset file (CSS or JS). - -``` php -taskMinify( 'web/assets/theme.css' ) - ->run() -?> -``` -Please install additional dependencies to use: - -``` -"patchwork/jsqueeze": "~1.0", -"natxet/CssMin": "~3.0" -``` - -* `to($dst)` Sets destination. Tries to guess type from it. -* `type($type)` Sets type with validation. -* `singleLine($singleLine)` Single line option for the JS minimisation. -* `keepImportantComments($keepImportantComments)` keepImportantComments option for the JS minimisation. -* `specialVarRx($specialVarRx)` specialVarRx option for the JS minimisation. -* `__toString()` @return string - -## Scss - - -Compiles scss files. - -```php -taskScss([ - 'scss/default.scss' => 'css/default.css' -]) -->importDir('assets/styles') -->run(); -?> -``` - -Use the following scss compiler in your project: - -``` -"leafo/scssphp": "~0.1", -``` - -You can implement additional compilers by extending this task and adding a -method named after them and overloading the scssCompilers() method to -inject the name there. - -* `setFormatter($formatterName)` Sets the formatter for scssphp -* `importDir($dirs)` Sets import directories -* `addImportPath($dir)` Adds import directory -* `setImportPaths($dirs)` Sets import directories -* `compiler($compiler, array $options = Array ( ) )` Sets the compiler. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Base.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Base.md deleted file mode 100644 index 3dc5fcd8..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Base.md +++ /dev/null @@ -1,126 +0,0 @@ -# Base Tasks -## Exec - - -Executes shell script. Closes it when running in background mode. - -``` php -taskExec('compass')->arg('watch')->run(); -// or use shortcut -$this->_exec('compass watch'); - -$this->taskExec('compass watch')->background()->run(); - -if ($this->taskExec('phpunit .')->run()->wasSuccessful()) { - $this->say('tests passed'); -} - -?> -``` - -* `background()` Executes command in background mode (asynchronously) -* `timeout($timeout)` Stop command if it runs longer then $timeout in seconds -* `idleTimeout($timeout)` Stops command if it does not output something for a while -* `env(array $env)` Sets the environment variables for the command -* `simulate($context)` {@inheritdoc} -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## ExecStack - - -Execute commands one by one in stack. -Stack can be stopped on first fail if you call `stopOnFail()`. - -```php -taskExecStack() - ->stopOnFail() - ->exec('mkdir site') - ->exec('cd site') - ->run(); - -?> -``` - -* `$this stopOnFail()` - -* `executable($executable)` * `param string` $executable -* `exec($command)` * `param string|string[]` $command -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `result($result)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed - -## ParallelExec - - -Class ParallelExecTask - -``` php -taskParallelExec() - ->process('php ~/demos/script.php hey') - ->process('php ~/demos/script.php hoy') - ->process('php ~/demos/script.php gou') - ->run(); -?> -``` - - -* ` timeout(int $timeout)` stops process if it runs longer then `$timeout` (seconds) -* ` idleTimeout(int $timeout)` stops process if it does not output for time longer then `$timeout` (seconds) - -* `printed($isPrinted = null)` * `param bool` $isPrinted -* `process($command)` * `param string|\Robo\Contract\CommandInterface` $command -* `timeout($timeout)` * `param int` $timeout -* `idleTimeout($idleTimeout)` * `param int` $idleTimeout - -## SymfonyCommand - - -Executes Symfony Command - -``` php -taskSymfonyCommand(new \Codeception\Command\Run('run')) - ->arg('suite','acceptance') - ->opt('debug') - ->run(); - -// Artisan Command -$this->taskSymfonyCommand(new ModelGeneratorCommand()) - ->arg('name', 'User') - ->run(); -?> -``` - -* `arg($arg, $value)` * `param string` $arg -* `opt($option, $value = null)` - -## Watch - - -Runs task when specified file or dir was changed. -Uses Lurker library. - -``` php -taskWatch() - ->monitor('composer.json', function() { - $this->taskComposerUpdate()->run(); -})->monitor('src', function() { - $this->taskExec('phpunit')->run(); -})->run(); -?> -``` - -* `monitor($paths, $callable)` * `param string|string[]` $paths - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Bower.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Bower.md deleted file mode 100644 index c54d6015..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Bower.md +++ /dev/null @@ -1,60 +0,0 @@ -# Bower Tasks - -## Install - - -Bower Install - -``` php -taskBowerInstall()->run(); - -// prefer dist with custom path -$this->taskBowerInstall('path/to/my/bower') - ->noDev() - ->run(); -?> -``` - -* `allowRoot()` adds `allow-root` option to bower -* `forceLatest()` adds `force-latest` option to bower -* `noDev()` adds `production` option to bower -* `offline()` adds `offline` option to bower -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Update - - -Bower Update - -``` php -taskBowerUpdate->run(); - -// prefer dist with custom path -$this->taskBowerUpdate('path/to/my/bower') - ->noDev() - ->run(); -?> -``` - -* `allowRoot()` adds `allow-root` option to bower -* `forceLatest()` adds `force-latest` option to bower -* `noDev()` adds `production` option to bower -* `offline()` adds `offline` option to bower -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Composer.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Composer.md deleted file mode 100644 index 310c3ef3..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Composer.md +++ /dev/null @@ -1,179 +0,0 @@ -# Composer Tasks - -## DumpAutoload - - -Composer Dump Autoload - -``` php -taskComposerDumpAutoload()->run(); - -// dump auto loader with custom path -$this->taskComposerDumpAutoload('path/to/my/composer.phar') - ->preferDist() - ->run(); - -// optimize autoloader dump with custom path -$this->taskComposerDumpAutoload('path/to/my/composer.phar') - ->optimize() - ->run(); - -// optimize autoloader dump with custom path and no dev -$this->taskComposerDumpAutoload('path/to/my/composer.phar') - ->optimize() - ->noDev() - ->run(); -?> -``` - -* `optimize()` * `return` $this -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Install - - -Composer Install - -``` php -taskComposerInstall()->run(); - -// prefer dist with custom path -$this->taskComposerInstall('path/to/my/composer.phar') - ->preferDist() - ->run(); - -// optimize autoloader with custom path -$this->taskComposerInstall('path/to/my/composer.phar') - ->optimizeAutoloader() - ->run(); -?> -``` - -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Remove - - -Composer Validate - -``` php -taskComposerValidate()->run(); -?> -``` - -* `dev()` * `return` $this -* `noProgress()` * `return` $this -* `noUpdate()` * `return` $this -* `updateNoDev()` * `return` $this -* `noUpdateWithDependencies()` * `return` $this -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Update - - -Composer Update - -``` php -taskComposerUpdate()->run(); - -// prefer dist with custom path -$this->taskComposerUpdate('path/to/my/composer.phar') - ->preferDist() - ->run(); - -// optimize autoloader with custom path -$this->taskComposerUpdate('path/to/my/composer.phar') - ->optimizeAutoloader() - ->run(); -?> -``` - -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Validate - - -Composer Validate - -``` php -taskComposerValidate()->run(); -?> -``` - -* `noCheckAll()` * `return` $this -* `noCheckLock()` * `return` $this -* `noCheckPublish()` * `return` $this -* `withDependencies()` * `return` $this -* `strict()` * `return` $this -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Development.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Development.md deleted file mode 100644 index f5c71557..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Development.md +++ /dev/null @@ -1,282 +0,0 @@ -# Development Tasks -## Changelog - - -Helps to manage changelog file. -Creates or updates `changelog.md` file with recent changes in current version. - -``` php -taskChangelog() - ->version($version) - ->change("released to github") - ->run(); -?> -``` - -Changes can be asked from Console - -``` php -taskChangelog() - ->version($version) - ->askForChanges() - ->run(); -?> -``` - -* `Development\Changelog filename(string $filename)` -* `Development\Changelog anchor(string $anchor)` -* `Development\Changelog version(string $version)` - -* `filename($filename)` * `param string` $filename -* `log($item)` * `param string` $item -* `anchor($anchor)` * `param string` $anchor -* `version($version)` * `param string` $version -* `changes(array $data)` * `param array` $data -* `change($change)` * `param string` $change -* `getChanges()` @return array - -## GenerateMarkdownDoc - - -Simple documentation generator from source files. -Takes classes, properties and methods with their docblocks and writes down a markdown file. - -``` php -taskGenDoc('models.md') - ->docClass('Model\User') // take class Model\User - ->docClass('Model\Post') // take class Model\Post - ->filterMethods(function(\ReflectionMethod $r) { - return $r->isPublic() or $r->isProtected(); // process public and protected methods - })->processClass(function(\ReflectionClass $r, $text) { - return "Class ".$r->getName()."\n\n$text\n\n###Methods\n"; - })->run(); -``` - -By default this task generates a documentation for each public method of a class. -It combines method signature with a docblock. Both can be post-processed. - -``` php -taskGenDoc('models.md') - ->docClass('Model\User') - ->processClassSignature(false) // false can be passed to not include class signature - ->processClassDocBlock(function(\ReflectionClass $r, $text) { - return "[This is part of application model]\n" . $text; - })->processMethodSignature(function(\ReflectionMethod $r, $text) { - return "#### {$r->name}()"; - })->processMethodDocBlock(function(\ReflectionMethod $r, $text) { - return strpos($r->name, 'save')===0 ? "[Saves to the database]\n" . $text : $text; - })->run(); -``` - -* ` docClass(string $classname)` put a class you want to be documented -* ` filterMethods(\Closure $func)` using callback function filter out methods that won't be documented -* ` filterClasses(\Closure $func)` using callback function filter out classes that won't be documented -* ` filterProperties(\Closure $func)` using callback function filter out properties that won't be documented -* ` processClass(\Closure $func)` post-process class documentation -* ` processClassSignature(\Closure $func)` post-process class signature. Provide *false* to skip. -* ` processClassDocBlock(\Closure $func)` post-process class docblock contents. Provide *false* to skip. -* ` processMethod(\Closure $func)` post-process method documentation. Provide *false* to skip. -* ` processMethodSignature(\Closure $func)` post-process method signature. Provide *false* to skip. -* ` processMethodDocBlock(\Closure $func)` post-process method docblock contents. Provide *false* to skip. -* ` processProperty(\Closure $func)` post-process property documentation. Provide *false* to skip. -* ` processPropertySignature(\Closure $func)` post-process property signature. Provide *false* to skip. -* ` processPropertyDocBlock(\Closure $func)` post-process property docblock contents. Provide *false* to skip. -* ` reorder(\Closure $func)` use a function to reorder classes -* ` reorderMethods(\Closure $func)` use a function to reorder methods in class -* ` prepend($text)` inserts text into beginning of markdown file -* ` append($text)` inserts text in the end of markdown file - -* `docClass($item)` * `param string` $item -* `filterMethods($filterMethods)` * `param callable` $filterMethods -* `filterClasses($filterClasses)` * `param callable` $filterClasses -* `filterProperties($filterProperties)` * `param callable` $filterProperties -* `processClass($processClass)` * `param callable` $processClass -* `processClassSignature($processClassSignature)` * `param callable|false` $processClassSignature -* `processClassDocBlock($processClassDocBlock)` * `param callable|false` $processClassDocBlock -* `processMethod($processMethod)` * `param callable|false` $processMethod -* `processMethodSignature($processMethodSignature)` * `param callable|false` $processMethodSignature -* `processMethodDocBlock($processMethodDocBlock)` * `param callable|false` $processMethodDocBlock -* `processProperty($processProperty)` * `param callable|false` $processProperty -* `processPropertySignature($processPropertySignature)` * `param callable|false` $processPropertySignature -* `processPropertyDocBlock($processPropertyDocBlock)` * `param callable|false` $processPropertyDocBlock -* `reorder($reorder)` * `param callable` $reorder -* `reorderMethods($reorderMethods)` * `param callable` $reorderMethods -* `reorderProperties($reorderProperties)` * `param callable` $reorderProperties -* `filename($filename)` * `param string` $filename -* `prepend($prepend)` * `param string` $prepend -* `append($append)` * `param string` $append -* `text($text)` * `param string` $text -* `textForClass($item)` * `param string` $item - -## Generate - - -Generate a Robo Task that is a wrapper around an existing class. - -``` php -taskGenerateTask('Symfony\Component\Filesystem\Filesystem', 'FilesystemStack') - ->run(); -``` - - - - -## GitHubRelease - - -Publishes new GitHub release. - -``` php -taskGitHubRelease('0.1.0') - ->uri('consolidation-org/Robo') - ->description('Add stuff people need.') - ->change('Fix #123') - ->change('Add frobulation method to all widgets') - ->run(); -?> -``` - -* `tag($tag)` * `param string` $tag -* `draft($draft)` * `param bool` $draft -* `name($name)` * `param string` $name -* `description($description)` * `param string` $description -* `prerelease($prerelease)` * `param bool` $prerelease -* `comittish($comittish)` * `param string` $comittish -* `appendDescription($description)` * `param string` $description -* `changes(array $changes)` -* `change($change)` * `param string` $change -* `repo($repo)` * `param string` $repo -* `owner($owner)` * `param string` $owner -* `uri($uri)` * `param string` $uri -* `user($user)` * `param string` $user -* `password($password)` * `param` $password - -## OpenBrowser - - -Opens the default's user browser -code inspired from openBrowser() function in https://github.com/composer/composer/blob/master/src/Composer/Command/HomeCommand.php - -``` php -taskOpenBrowser('http://localhost') - ->run(); - -// open two browser windows -$this->taskOpenBrowser([ - 'http://localhost/mysite', - 'http://localhost/mysite2' - ]) - ->run(); -``` - - - -## PackPhar - - -Creates Phar. - -``` php -taskPackPhar('package/codecept.phar') - ->compress() - ->stub('package/stub.php'); - - $finder = Finder::create() - ->name('*.php') - ->in('src'); - - foreach ($finder as $file) { - $pharTask->addFile('src/'.$file->getRelativePathname(), $file->getRealPath()); - } - - $finder = Finder::create()->files() - ->name('*.php') - ->in('vendor'); - - foreach ($finder as $file) { - $pharTask->addStripped('vendor/'.$file->getRelativePathname(), $file->getRealPath()); - } - $pharTask->run(); - - // verify Phar is packed correctly - $code = $this->_exec('php package/codecept.phar'); -?> -``` - -* `compress($compress = null)` * `param bool` $compress -* `stub($stub)` * `param string` $stub -* `addStripped($path, $file)` * `param string` $path -* `addFile($path, $file)` * `param string` $path -* `addFiles($files)` * `param \Symfony\Component\Finder\SplFileInfo[]` $files -* `executable($file)` * `param string` $file - -## PhpServer - - -Runs PHP server and stops it when task finishes. - -``` php -taskServer(8000) - ->dir('public') - ->run(); - -// run with IP 0.0.0.0 -$this->taskServer(8000) - ->host('0.0.0.0') - ->run(); - -// execute server in background -$this->taskServer(8000) - ->background() - ->run(); -?> -``` - -* `host($host)` * `param string` $host -* `dir($path)` * `param string` $path -* `background()` Executes command in background mode (asynchronously) -* `timeout($timeout)` Stop command if it runs longer then $timeout in seconds -* `idleTimeout($timeout)` Stops command if it does not output something for a while -* `env(array $env)` Sets the environment variables for the command -* `simulate($context)` {@inheritdoc} -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## SemVer - - -Helps to maintain `.semver` file. - -```php -taskSemVer('.semver') - ->increment() - ->run(); -?> -``` - - -* `__toString()` @return string -* `setFormat($format)` * `param string` $format -* `setMetadataSeparator($separator)` * `param string` $separator -* `setPrereleaseSeparator($separator)` * `param string` $separator -* `increment($what = null)` * `param string` $what -* `prerelease($tag = null)` * `param string` $tag -* `metadata($data)` * `param array|string` $data - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Docker.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Docker.md deleted file mode 100644 index 712b236e..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Docker.md +++ /dev/null @@ -1,249 +0,0 @@ -# Docker Tasks - -## Build - - -Builds Docker image - -```php -taskDockerBuild()->run(); - -$this->taskDockerBuild('path/to/dir') - ->tag('database') - ->run(); - -?> - -``` - -Class Build -@package Robo\Task\Docker - -* `tag($tag)` * `param string` $tag -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Commit - - -Commits docker container to an image - -``` -$this->taskDockerCommit($containerId) - ->name('my/database') - ->run(); - -// alternatively you can take the result from DockerRun task: - -$result = $this->taskDockerRun('db') - ->exec('./prepare_database.sh') - ->run(); - -$task->dockerCommit($result) - ->name('my/database') - ->run(); -``` - -* `name($name)` * `param` $name -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Exec - - -Executes command inside running Docker container - -```php -taskDockerRun('test_env') - ->detached() - ->run(); - -$this->taskDockerExec($test) - ->interactive() - ->exec('./runtests') - ->run(); - -// alternatively use commands from other tasks - -$this->taskDockerExec($test) - ->interactive() - ->exec($this->taskCodecept()->suite('acceptance')) - ->run(); -?> -``` - - -* `detached()` * `return` $this -* `interactive()` * `return` $this -* `exec($command)` * `param string|\Robo\Contract\CommandInterface` $command -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Pull - - -Pulls an image from DockerHub - -```php -taskDockerPull('wordpress') - ->run(); - -?> -``` - - -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Remove - - -Remove docker container - -```php -taskDockerRemove($container) - ->run(); -?> -``` - - -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - - -## Run - - -Performs `docker run` on a container. - -```php -taskDockerRun('mysql')->run(); - -$result = $this->taskDockerRun('my_db_image') - ->env('DB', 'database_name') - ->volume('/path/to/data', '/data') - ->detached() - ->publish(3306) - ->name('my_mysql') - ->run(); - -// retrieve container's cid: -$this->say("Running container ".$result->getCid()); - -// execute script inside container -$result = $this->taskDockerRun('db') - ->exec('prepare_test_data.sh') - ->run(); - -$this->taskDockerCommit($result) - ->name('test_db') - ->run(); - -// link containers -$mysql = $this->taskDockerRun('mysql') - ->name('wp_db') // important to set name for linked container - ->env('MYSQL_ROOT_PASSWORD', '123456') - ->run(); - -$this->taskDockerRun('wordpress') - ->link($mysql) - ->publish(80, 8080) - ->detached() - ->run(); - -?> -``` - - -* `detached()` * `return` $this -* `interactive()` * `return` $this -* `exec($run)` * `param string|\Robo\Contract\CommandInterface` $run -* `volume($from, $to = null)` * `param string` $from -* `env($variable, $value = null)` * `param string` $variable -* `publish($port = null, $portTo = null)` * `param null|int` $port -* `containerWorkdir($dir)` * `param string` $dir -* `user($user)` * `param string` $user -* `privileged()` * `return` $this -* `name($name)` * `param string` $name -* `link($name, $alias)` * `param string|\Robo\Task\Docker\Result` $name -* `tmpDir($dir)` * `param string` $dir -* `getTmpDir()` @return string -* `getUniqId()` @return string -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Start - - -Starts Docker container - -```php -taskDockerStart($cidOrResult) - ->run(); -?> -``` - -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Stop - - -Stops Docker container - -```php -taskDockerStop($cidOrResult) - ->run(); -?> -``` - -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/File.md b/lib/composer/vendor/consolidation/robo/docs/tasks/File.md deleted file mode 100644 index 7cb86a3a..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/File.md +++ /dev/null @@ -1,129 +0,0 @@ -# File Tasks -## Concat - - -Merges files into one. Used for preparing assets. - -``` php -taskConcat([ - 'web/assets/screen.css', - 'web/assets/print.css', - 'web/assets/theme.css' - ]) - ->to('web/assets/style.css') - ->run() -?> -``` - -* `to($dst)` set the destination file - -## Replace - - -Performs search and replace inside a files. - -``` php -taskReplaceInFile('VERSION') - ->from('0.2.0') - ->to('0.3.0') - ->run(); - -$this->taskReplaceInFile('README.md') - ->from(date('Y')-1) - ->to(date('Y')) - ->run(); - -$this->taskReplaceInFile('config.yml') - ->regex('~^service:~') - ->to('services:') - ->run(); - -$this->taskReplaceInFile('box/robo.txt') - ->from(array('##dbname##', '##dbhost##')) - ->to(array('robo', 'localhost')) - ->run(); -?> -``` - -* `regex(string)` regex to match string to be replaced -* `from(string|array)` string(s) to be replaced -* `to(string|array)` value(s) to be set as a replacement - -* `filename($filename)` * `param string` $filename -* `from($from)` * `param string` $from -* `to($to)` * `param string` $to -* `regex($regex)` * `param string` $regex - -## TmpFile - - -Create a temporary file that is automatically cleaned up -once the task collection is is part of completes. When created, -it is given a random filename. - -This temporary file may be manipulated exacatly like taskWrite(). -It is deleted as soon as the collection it is a part of completes -or rolls back. - -``` php -collectionBuilder(); -$tmpFilePath = $collection->taskTmpFile() - ->line('-----') - ->line(date('Y-m-d').' '.$title) - ->line('----') - ->getPath(); -$collection->run(); -?> -``` - -* `complete()` Delete this file when our collection completes. -* `filename($filename)` * `param string` $filename -* `append($append = null)` * `param bool` $append -* `line($line)` add a line. -* `lines(array $lines)` add more lines. -* `text($text)` add a text. -* `textFromFile($filename)` add a text from a file. -* `place($name, $val)` substitute a placeholder with value, placeholder must be enclosed by `{}`. -* `replace($string, $replacement)` replace any string with value. -* `regexReplace($pattern, $replacement)` replace any string with value using regular expression. -* `appendIfMatches($pattern, $text)` Append the provided text to the end of the buffer if the provided -* `appendUnlessMatches($pattern, $text)` Append the provided text to the end of the buffer unless the provided -* `originalContents()` @return string -* `wouldChange()` @return bool -* `getPath()` @return string - -## Write - - -Writes to file. - -``` php -taskWriteToFile('blogpost.md') - ->line('-----') - ->line(date('Y-m-d').' '.$title) - ->line('----') - ->run(); -?> -``` - -* `append()` - -* `filename($filename)` * `param string` $filename -* `append($append = null)` * `param bool` $append -* `line($line)` add a line. -* `lines(array $lines)` add more lines. -* `text($text)` add a text. -* `textFromFile($filename)` add a text from a file. -* `place($name, $val)` substitute a placeholder with value, placeholder must be enclosed by `{}`. -* `replace($string, $replacement)` replace any string with value. -* `regexReplace($pattern, $replacement)` replace any string with value using regular expression. -* `appendIfMatches($pattern, $text)` Append the provided text to the end of the buffer if the provided -* `appendUnlessMatches($pattern, $text)` Append the provided text to the end of the buffer unless the provided -* `originalContents()` @return string -* `wouldChange()` @return bool -* `getPath()` @return string - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Filesystem.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Filesystem.md deleted file mode 100644 index 20bc0170..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Filesystem.md +++ /dev/null @@ -1,217 +0,0 @@ -# Filesystem Tasks - -## CleanDir - - -Deletes all files from specified dir, ignoring git files. - -``` php -taskCleanDir(['tmp','logs'])->run(); -// as shortcut -$this->_cleanDir('app/cache'); -?> -``` - - - -## CopyDir - - -Copies one dir into another - -``` php -taskCopyDir(['dist/config' => 'config'])->run(); -// as shortcut -$this->_copyDir('dist/config', 'config'); -?> -``` - -* `dirPermissions($value)` Sets the default folder permissions for the destination if it doesn't exist -* `exclude($exclude = null)` List files to exclude. - -## DeleteDir - - -Deletes dir - -``` php -taskDeleteDir('tmp')->run(); -// as shortcut -$this->_deleteDir(['tmp', 'log']); -?> -``` - - - -## FilesystemStack - - -Wrapper for [Symfony Filesystem](http://symfony.com/doc/current/components/filesystem.html) Component. -Comands are executed in stack and can be stopped on first fail with `stopOnFail` option. - -``` php -taskFilesystemStack() - ->mkdir('logs') - ->touch('logs/.gitignore') - ->chgrp('www', 'www-data') - ->symlink('/var/log/nginx/error.log', 'logs/error.log') - ->run(); - -// one line -$this->_touch('.gitignore'); -$this->_mkdir('logs'); - -?> -``` - -* `$this mkdir($dir)` -* `$this touch($file)` -* `$this copy($from, $to, $force = null)` -* `$this chmod($file, $permissions, $umask = null, $recursive = null)` -* `$this chgrp($file, $group, $recursive = null)` -* `$this chown($file, $user, $recursive = null)` -* `$this remove($file)` -* `$this rename($from, $to)` -* `$this symlink($from, $to)` -* `$this mirror($from, $to)` - -* `stopOnFail($stop = null)` * `param bool` $stop - -## FlattenDir - - -Searches for files in a nested directory structure and copies them to -a target directory with or without the parent directories. The task was -inspired by [gulp-flatten](https://www.npmjs.com/package/gulp-flatten). - -Example directory structure: - -``` -└── assets - ├── asset-library1 - │ ├── README.md - │ └── asset-library1.min.js - └── asset-library2 - ├── README.md - └── asset-library2.min.js -``` - -The following code will search the `*.min.js` files and copy them -inside a new `dist` folder: - -``` php -taskFlattenDir(['assets/*.min.js' => 'dist'])->run(); -// or use shortcut -$this->_flattenDir('assets/*.min.js', 'dist'); -?> -``` - -You can also define the target directory with an additional method, instead of -key/value pairs. More similar to the gulp-flatten syntax: - -``` php -taskFlattenDir(['assets/*.min.js']) - ->to('dist') - ->run(); -?> -``` - -You can also append parts of the parent directories to the target path. If you give -the value `1` to the `includeParents()` method, then the top parent will be appended -to the target directory resulting in a path such as `dist/assets/asset-library1.min.js`. - -If you give a negative number, such as `-1` (the same as specifying `array(0, 1)` then -the bottom parent will be appended, resulting in a path such as -`dist/asset-library1/asset-library1.min.js`. - -The top parent directory will always be starting from the relative path to the current -directory. You can override that with the `parentDir()` method. If in the above example -you would specify `assets`, then the top parent directory would be `asset-library1`. - -``` php -taskFlattenDir(['assets/*.min.js' => 'dist']) - ->parentDir('assets') - ->includeParents(1) - ->run(); -?> -``` - -* `dirPermissions($permission)` Sets the default folder permissions for the destination if it does not exist. -* `includeParents($parents)` Sets the value from which direction and how much parent dirs should be included. -* `parentDir($dir)` Sets the parent directory from which the relative parent directories will be calculated. -* `to($target)` Sets the target directory where the files will be copied to. - -## MirrorDir - - -Mirrors a directory to another - -``` php -taskMirrorDir(['dist/config/' => 'config/'])->run(); -// or use shortcut -$this->_mirrorDir('dist/config/', 'config/'); - -?> -``` - - - -## TmpDir - - -Create a temporary directory that is automatically cleaned up -once the task collection is is part of completes. - -Use WorkDir if you do not want the directory to be deleted. - -``` php -run(). -$collection = $this->collectionBuilder(); -$tmpPath = $collection->tmpDir()->getPath(); -$collection->taskFilesystemStack() - ->mkdir("$tmpPath/log") - ->touch("$tmpPath/log/error.txt"); -$collection->run(); -// as shortcut (deleted when program exits) -$tmpPath = $this->_tmpDir(); -?> -``` - -* `cwd($shouldChangeWorkingDirectory = null)` Flag that we should cwd to the temporary directory when it is -* `complete()` Delete this directory when our collection completes. -* `getPath()` Get a reference to the path to the temporary directory, so that - -## WorkDir - - -Create a temporary working directory that is automatically renamed to its -final desired location if all of the tasks in the collection succeed. If -there is a rollback, then the working directory is deleted. - -``` php -collectionBuilder(); -$workingPath = $collection->workDir("build")->getPath(); -$collection->taskFilesystemStack() - ->mkdir("$workingPath/log") - ->touch("$workingPath/log/error.txt"); -$collection->run(); -?> -``` - -* `complete()` Move our working directory into its final destination once the -* `rollback()` Delete our working directory -* `getPath()` Get a reference to the path to the temporary directory, so that -* `cwd($shouldChangeWorkingDirectory = null)` Flag that we should cwd to the temporary directory when it is - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Gulp.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Gulp.md deleted file mode 100644 index fd387cc4..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Gulp.md +++ /dev/null @@ -1,31 +0,0 @@ -# Gulp Tasks - -## Run - - -Gulp Run - -``` php -taskGulpRun()->run(); - -// run task 'clean' with --silent option -$this->taskGulpRun('clean') - ->silent() - ->run(); -?> -``` - -* `silent()` adds `silent` option to gulp -* `noColor()` adds `--no-color` option to gulp -* `color()` adds `--color` option to gulp -* `simple()` adds `--tasks-simple` option to gulp -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Npm.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Npm.md deleted file mode 100644 index 2a60f2af..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Npm.md +++ /dev/null @@ -1,54 +0,0 @@ -# Npm Tasks - -## Install - - -Npm Install - -``` php -taskNpmInstall()->run(); - -// prefer dist with custom path -$this->taskNpmInstall('path/to/my/npm') - ->noDev() - ->run(); -?> -``` - -* `noDev()` adds `production` option to npm -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Update - - -Npm Update - -```php -taskNpmUpdate()->run(); - -// prefer dist with custom path -$this->taskNpmUpdate('path/to/my/npm') - ->noDev() - ->run(); -?> -``` - -* `noDev()` adds `production` option to npm -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Remote.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Remote.md deleted file mode 100644 index 7121b7c8..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Remote.md +++ /dev/null @@ -1,143 +0,0 @@ -# Remote Tasks -## Rsync - - -Executes rsync in a flexible manner. - -``` php -$this->taskRsync() - ->fromPath('src/') - ->toHost('localhost') - ->toUser('dev') - ->toPath('/var/www/html/app/') - ->remoteShell('ssh -i public_key') - ->recursive() - ->excludeVcs() - ->checksum() - ->wholeFile() - ->verbose() - ->progress() - ->humanReadable() - ->stats() - ->run(); -``` - -You could also clone the task and do a dry-run first: - -``` php -$rsync = $this->taskRsync() - ->fromPath('src/') - ->toPath('example.com:/var/www/html/app/') - ->archive() - ->excludeVcs() - ->progress() - ->stats(); - -$dryRun = clone $rsync; -$dryRun->dryRun()->run(); -if ('y' === $this->ask('Do you want to run (y/n)')) { - $rsync->run(); -} -``` - -* ` fromUser(string $user)` -* ` fromHost(string $hostname)` -* ` toUser(string $user)` -* ` toHost(string $hostname)` - -* `fromPath($path)` This can either be a full rsync path spec (user@host:path) or just a path. -* `toPath($path)` This can either be a full rsync path spec (user@host:path) or just a path. -* `fromUser($fromUser)` * `param string` $fromUser -* `fromHost($fromHost)` * `param string` $fromHost -* `toUser($toUser)` * `param string` $toUser -* `toHost($toHost)` * `param string` $toHost -* `progress()` * `return` $this -* `stats()` * `return` $this -* `recursive()` * `return` $this -* `verbose()` * `return` $this -* `checksum()` * `return` $this -* `archive()` * `return` $this -* `compress()` * `return` $this -* `owner()` * `return` $this -* `group()` * `return` $this -* `times()` * `return` $this -* `delete()` * `return` $this -* `timeout($seconds)` * `param int` $seconds -* `humanReadable()` * `return` $this -* `wholeFile()` * `return` $this -* `dryRun()` * `return` $this -* `itemizeChanges()` * `return` $this -* `excludeVcs()` Excludes .git, .svn and .hg items at any depth. -* `exclude($pattern)` * `param array|string` $pattern -* `excludeFrom($file)` * `param string` $file -* `includeFilter($pattern)` * `param array|string` $pattern -* `filter($pattern)` * `param array|string` $pattern -* `filesFrom($file)` * `param string` $file -* `remoteShell($command)` * `param string` $command -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Ssh - - -Runs multiple commands on a remote server. -Per default, commands are combined with &&, unless stopOnFail is false. - -```php -taskSshExec('remote.example.com', 'user') - ->remoteDir('/var/www/html') - ->exec('ls -la') - ->exec('chmod g+x logs') - ->run(); - -``` - -You can even exec other tasks (which implement CommandInterface): - -```php -$gitTask = $this->taskGitStack() - ->checkout('master') - ->pull(); - -$this->taskSshExec('remote.example.com') - ->remoteDir('/var/www/html/site') - ->exec($gitTask) - ->run(); -``` - -You can configure the remote directory for all future calls: - -```php -::configure('remoteDir', '/some-dir'); -``` - -* `$this stopOnFail(bool $stopOnFail)` Whether or not to chain commands together with && - and stop the chain if one command fails -* `$this remoteDir(string $remoteWorkingDirectory)` Changes to the given directory before running commands - -* `hostname($hostname)` * `param string` $hostname -* `user($user)` * `param string` $user -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `remoteDir($remoteDir)` * `param string` $remoteDir -* `identityFile($filename)` * `param string` $filename -* `port($port)` * `param int` $port -* `forcePseudoTty()` * `return` $this -* `quiet()` * `return` $this -* `verbose()` * `return` $this -* `exec($command)` * `param string|string[]|CommandInterface` $command -* `simulate($context)` {@inheritdoc} -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Testing.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Testing.md deleted file mode 100644 index c9fd5196..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Testing.md +++ /dev/null @@ -1,171 +0,0 @@ -# Testing Tasks -## Atoum - - -Runs [atoum](http://atoum.org/) tests - -``` php -taskAtoum() - ->files('path/to/test.php') - ->configFile('config/dev.php') - ->run() - -?> -``` - -* `tags($tags)` Tag or Tags to filter. -* `lightReport()` Display result using the light reporter. -* `tap()` Display result using the tap reporter. -* `bootstrap($file)` Path to the bootstrap file. -* `configFile($file)` Path to the config file. -* `debug()` Use atoum's debug mode. -* `files($files)` Test file or test files to run. -* `directories($directories)` Test directory or directories to run. -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Behat - - -Executes Behat tests - -``` php -taskBehat() - ->format('pretty') - ->noInteraction() - ->run(); -?> -``` - - -* `stopOnFail()` * `return` $this -* `noInteraction()` * `return` $this -* `config($config_file)` * `param` $config_file -* `colors()` * `return` $this -* `noColors()` * `return` $this -* `suite($suite)` * `param string` $suite -* `verbose($level = null)` * `param string` $level -* `format($formater)` * `param string` $formater -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Codecept - - -Executes Codeception tests - -``` php -taskCodecept() - ->suite('acceptance') - ->env('chrome') - ->group('admin') - ->xml() - ->html() - ->run(); - -?> -``` - - -* `suite($suite)` * `param string` $suite -* `test($testName)` * `param string` $testName -* `group($group)` set group option. Can be called multiple times -* `excludeGroup($group)` * `param string` $group -* `json($file = null)` generate json report -* `xml($file = null)` generate xml JUnit report -* `html($dir = null)` Generate html report -* `tap($file = null)` generate tap report -* `configFile($file)` provides config file other then default `codeception.yml` with `-c` option -* `coverage($cov = null)` collect codecoverage in raw format. You may pass name of cov file to save results -* `silent()` execute in silent mode -* `coverageXml($xml = null)` collect code coverage in xml format. You may pass name of xml file to save results -* `coverageHtml($html = null)` collect code coverage and generate html report. You may pass -* `env($env)` * `param string` $env -* `debug()` * `return` $this -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## PHPUnit - - -Runs PHPUnit tests - -``` php -taskPHPUnit() - ->group('core') - ->bootstrap('test/bootstrap.php') - ->run() - -?> -``` - -* `filter($filter)` * `param string` $filter -* `group($group)` * `param string` $group -* `excludeGroup($group)` * `param string` $group -* `json($file = null)` adds `log-json` option to runner -* `xml($file = null)` adds `log-junit` option -* `tap($file = null)` * `param string` $file -* `bootstrap($file)` * `param string` $file -* `configFile($file)` * `param string` $file -* `debug()` * `return` $this -* `files($files)` Directory of test files or single test file to run. -* `file($file)` Test the provided file. -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Phpspec - - -Executes Phpspec tests - -``` php -taskPhpspec() - ->format('pretty') - ->noInteraction() - ->run(); -?> -``` - - -* `stopOnFail()` -* `noCodeGeneration()` -* `quiet()` -* `verbose($level = null)` -* `noAnsi()` -* `noInteraction()` -* `config($config_file)` -* `format($formater)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Vcs.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Vcs.md deleted file mode 100644 index 69465c0d..00000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Vcs.md +++ /dev/null @@ -1,108 +0,0 @@ -# Vcs Tasks -## GitStack - - -Runs Git commands in stack. You can use `stopOnFail()` to point that stack should be terminated on first fail. - -``` php -taskGitStack() - ->stopOnFail() - ->add('-A') - ->commit('adding everything') - ->push('origin','master') - ->tag('0.6.0') - ->push('origin','0.6.0') - ->run() - -$this->taskGitStack() - ->stopOnFail() - ->add('doc/*') - ->commit('doc updated') - ->push() - ->run(); -?> -``` - -* `cloneRepo($repo, $to = null)` Executes `git clone` -* `add($pattern)` Executes `git add` command with files to add pattern -* `commit($message, $options = null)` Executes `git commit` command with a message -* `pull($origin = null, $branch = null)` Executes `git pull` command. -* `push($origin = null, $branch = null)` Executes `git push` command -* `merge($branch)` Performs git merge -* `checkout($branch)` Executes `git checkout` command -* `tag($tag_name, $message = null)` Executes `git tag` command -* `executable($executable)` * `param string` $executable -* `exec($command)` * `param string|string[]` $command -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `result($result)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed - -## HgStack - - -Runs hg commands in stack. You can use `stopOnFail()` to point that stack should be terminated on first fail. - -``` php -hgStack - ->cloneRepo('https://bitbucket.org/durin42/hgsubversion') - ->pull() - ->add() - ->commit('changed') - ->push() - ->tag('0.6.0') - ->push('0.6.0') - ->run(); -?> -``` - -* `cloneRepo($repo, $to = null)` Executes `hg clone` -* `add($include = null, $exclude = null)` Executes `hg add` command with files to add by pattern -* `commit($message, $options = null)` Executes `hg commit` command with a message -* `pull($branch = null)` Executes `hg pull` command. -* `push($branch = null)` Executes `hg push` command -* `merge($revision = null)` Performs hg merge -* `tag($tag_name, $message = null)` Executes `hg tag` command -* `executable($executable)` * `param string` $executable -* `exec($command)` * `param string|string[]` $command -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `result($result)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed - -## SvnStack - - -Runs Svn commands in stack. You can use `stopOnFail()` to point that stack should be terminated on first fail. - -``` php -taskSvnStack() - ->checkout('http://svn.collab.net/repos/svn/trunk') - ->run() - -// alternatively -$this->_svnCheckout('http://svn.collab.net/repos/svn/trunk'); - -$this->taskSvnStack('username', 'password') - ->stopOnFail() - ->update() - ->add('doc/*') - ->commit('doc updated') - ->run(); -?> -``` - -* `update($path = null)` Updates `svn update` command -* `add($pattern = null)` Executes `svn add` command with files to add pattern -* `commit($message, $options = null)` Executes `svn commit` command with a message -* `checkout($branch)` Executes `svn checkout` command -* `executable($executable)` * `param string` $executable -* `exec($command)` * `param string|string[]` $command -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `result($result)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed - diff --git a/lib/composer/vendor/consolidation/robo/examples/RoboFile.php b/lib/composer/vendor/consolidation/robo/examples/RoboFile.php deleted file mode 100644 index 8e057f6f..00000000 --- a/lib/composer/vendor/consolidation/robo/examples/RoboFile.php +++ /dev/null @@ -1,425 +0,0 @@ -taskWatch()->monitor(['composer.json', 'composer.lock'], function () { - $this->taskComposerUpdate()->run(); - })->run(); - } - - /** - * Demonstrates Robo input APIs. - */ - public function tryInput() - { - $answer = $this->ask('how are you?'); - $this->say('You are '.$answer); - $yes = $this->confirm('Do you want one more question?'); - if (!$yes) { - return Result::cancelled(); - } - $lang = $this->askDefault('what is your favorite scripting language?', 'PHP'); - $this->say($lang); - $pin = $this->askHidden('Ok, now tell your PIN code (it is hidden)'); - $this->yell('Ha-ha, your pin code is: '.$pin); - $this->say('Bye!'); - } - - /** - * Demonstrates parallel execution. - * - * @option $printed Print the output of each process. - * @option $error Include an extra process that fails. - */ - public function tryPara($options = ['printed' => false, 'error' => false]) - { - $dir = __DIR__; - $para = $this->taskParallelExec() - ->printed($options['printed']) - ->process("php $dir/tests/_data/parascript.php hey 4") - ->process("php $dir/tests/_data/parascript.php hoy 3") - ->process("php $dir/tests/_data/parascript.php gou 2") - ->process("php $dir/tests/_data/parascript.php die 1"); - if ($options['error']) { - $para->process("ls $dir/tests/_data/filenotfound"); - } - return $para->run(); - } - - /** - * Demonstrates Robo argument passing. - * - * @param string $a The first parameter. Required. - * @param string $b The second parameter. Optional. - */ - public function tryArgs($a, $b = 'default') - { - $this->say("The parameter a is $a and b is $b"); - } - - /** - * Demonstrate Robo variable argument passing. - * - * @param $a A list of commandline parameters. - */ - public function tryArrayArgs(array $a) - { - $this->say("The parameters passed are:\n" . var_export($a, true)); - } - - /** - * Demonstrate Robo boolean options. - * - * @param $opts The options. - * @option boolean $silent Supress output. - */ - public function tryOptbool($opts = ['silent|s' => false]) - { - if (!$opts['silent']) { - $this->say("Hello, world"); - } - } - - /** - * Demonstrate the use of the PHP built-in webserver. - */ - public function tryServer() - { - return $this->taskServer(8000) - ->dir('site') - ->arg('site/index.php') - ->run(); - } - - /** - * Demonstrate the use of the Robo open-browser task. - */ - public function tryOpenBrowser() - { - return $this->taskOpenBrowser([ - 'http://robo.li', - 'https://github.com/consolidation-org/Robo' - ])->run(); - } - - /** - * Demonstrate Robo error output and command failure. - */ - public function tryError() - { - return $this->taskExec('ls xyzzy' . date('U'))->dir('/tmp')->run(); - } - - /** - * Demonstrate Robo standard output and command success. - */ - public function trySuccess() - { - return $this->_exec('pwd'); - } - - /** - * @field-labels - * name: Name - * species: Species - * legs: Legs - * food: Favorite Food - * id: Id - * @return PropertyList - */ - public function tryInfo() - { - $outputData = [ - 'name' => 'fluffy', - 'species' => 'cat', - 'legs' => 4, - 'food' => 'salmon', - 'id' => 389245032, - ]; - - $data = new PropertyList($outputData); - - // Add a render function to transform cell data when the output - // format is a table, or similar. This allows us to add color - // information to the output without modifying the data cells when - // using yaml or json output formats. - $data->addRendererFunction( - // n.b. There is a fourth parameter $rowData that may be added here. - function ($key, $cellData, FormatterOptions $options) { - if ($key == 'name') { - return "$cellData"; - } - return $cellData; - } - ); - - return $data; - } - - /** - * Demonstrate Robo formatters. Default format is 'table'. - * - * @field-labels - * first: I - * second: II - * third: III - * @default-string-field second - * @usage try:formatters --format=yaml - * @usage try:formatters --format=csv - * @usage try:formatters --fields=first,third - * @usage try:formatters --fields=III,II - * @aliases tf - * - * @return \Consolidation\OutputFormatters\StructuredData\RowsOfFields - */ - public function tryFormatters($somthing = 'default', $options = ['format' => 'table', 'fields' => '']) - { - $outputData = [ - 'en' => [ 'first' => 'One', 'second' => 'Two', 'third' => 'Three' ], - 'de' => [ 'first' => 'Eins', 'second' => 'Zwei', 'third' => 'Drei' ], - 'jp' => [ 'first' => 'Ichi', 'second' => 'Ni', 'third' => 'San' ], - 'es' => [ 'first' => 'Uno', 'second' => 'Dos', 'third' => 'Tres' ], - ]; - return new RowsOfFields($outputData); - } - - /** - * Demonstrate an alter hook with an option - * - * @hook alter try:formatters - * @option $french Add a row with French numbers. - * @usage try:formatters --french - */ - public function alterFormatters($result, CommandData $commandData) - { - if ($commandData->input()->getOption('french')) { - $result['fr'] = [ 'first' => 'Un', 'second' => 'Deux', 'third' => 'Trois' ]; - } - - return $result; - } - - /** - * Demonstrate what happens when a command or a task - * throws an exception. Note that typically, Robo commands - * should return Result objects rather than throw exceptions. - */ - public function tryException($options = ['task' => false]) - { - if (!$options['task']) { - throw new RuntimeException('Command failed with an exception.'); - } - return new ExceptionTask('Task failed with an exception.'); - } - - /** - * Demonstrate deprecated task behavior. - * - * Demonstrate what happens when using a task that is created via - * direct instantiation, which omits initialization done by the - * container. Emits a warning message. - */ - public function tryDeprecated() - { - // Calling 'new' directly without manually setting - // up dependencies will result in a deprecation warning. - // @see RoboFile::trySuccess() - return (new \Robo\Task\Base\Exec('pwd'))->run(); - } - - /** - * Demonstrate the use of a collection builder to chain multiple tasks - * together into a collection, which is executed once constructed. - * - * For demonstration purposes only; this could, of course, be done - * with a single FilesystemStack. - */ - public function tryBuilder() - { - return $this->collectionBuilder() - ->taskFilesystemStack() - ->mkdir('a') - ->touch('a/a.txt') - ->taskFilesystemStack() - ->mkdir('a/b') - ->touch('a/b/b.txt') - ->taskFilesystemStack() - ->mkdir('a/b/c') - ->touch('a/b/c/c.txt') - ->run(); - } - - public function tryBuilderRollback() - { - // This example will create two builders, and add - // the first one as a child of the second in order - // to demonstrate nested rollbacks. - $collection = $this->collectionBuilder() - ->taskFilesystemStack() - ->mkdir('g') - ->touch('g/g.txt') - ->rollback( - $this->taskDeleteDir('g') - ) - ->taskFilesystemStack() - ->mkdir('g/h') - ->touch('g/h/h.txt') - ->taskFilesystemStack() - ->mkdir('g/h/i/c') - ->touch('g/h/i/i.txt'); - - return $this->collectionBuilder() - ->progressMessage('Start recursive collection') - ->addTask($collection) - ->progressMessage('Done with recursive collection') - ->taskExec('ls xyzzy' . date('U')) - ->dir('/tmp') - ->run(); - } - - public function tryWorkdir() - { - // This example works like tryBuilderRollback, - // but does equivalent operations using a working - // directory. The working directory is deleted on rollback - $collection = $this->collectionBuilder(); - - $workdir = $collection->workDir('w'); - - $collection - ->taskFilesystemStack() - ->touch("$workdir/g.txt") - ->taskFilesystemStack() - ->mkdir("$workdir/h") - ->touch("$workdir/h/h.txt") - ->taskFilesystemStack() - ->mkdir("$workdir/h/i/c") - ->touch("$workdir/h/i/i.txt"); - - return $this->collectionBuilder() - ->progressMessage('Start recursive collection') - ->addTask($collection) - ->progressMessage('Done with recursive collection') - ->taskExec('ls xyzzy' . date('U')) - ->dir('/tmp') - ->run(); - } - - /** - * Demonstrates Robo temporary directory usage. - */ - public function tryTmpDir() - { - // Set up a collection to add tasks to - $collection = $this->collectionBuilder(); - - // Get a temporary directory to work in. Note that we get a path - // back, but the directory is not created until the task runs. - $tmpPath = $collection->tmpDir(); - - $result = $collection - ->taskWriteToFile("$tmpPath/file.txt") - ->line('Example file') - ->run(); - - if (is_dir($tmpPath)) { - $this->say("The temporary directory at $tmpPath was not cleaned up after the collection completed."); - } else { - $this->say("The temporary directory at $tmpPath was automatically deleted."); - } - - return $result; - } - - /** - * Description - * @param $options - * @option delay Miliseconds delay - * @return type - */ - public function tryProgress($options = ['delay' => 500]) - { - $delay = $options['delay']; - $delayUntilProgressStart = \Robo\Robo::config()->get(\Robo\Config::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL); - $this->say("Progress bar will display after $delayUntilProgressStart seconds of activity."); - - $processList = range(1, 10); - return $this->collectionBuilder() - ->taskForEach($processList) - ->iterationMessage('Processing {value}') - ->call( - function ($value) use($delay) { - // TaskForEach::call should only be used to do - // non-Robo operations. To use Robo tasks in an - // iterator, @see TaskForEach::withBuilder. - usleep($delay * 1000); // delay units: msec, usleep units: usec - } - ) - ->run(); - } - - public function tryIter() - { - $workdir = 'build/iter-example'; - $this->say("Creating sample direcories in $workdir."); - - $processList = ['cats', 'dogs', 'sheep', 'fish', 'horses', 'cows']; - return $this->collectionBuilder() - ->taskFilesystemStack() - ->mkdir($workdir) - ->taskCleanDir($workdir) - ->taskForEach($processList) - ->withBuilder( - function ($builder, $key, $value) use ($workdir) { - return $builder - ->taskFilesystemStack() - ->mkdir("$workdir/$value"); - } - ) - ->run(); - } -} - -class ExceptionTask extends \Robo\Task\BaseTask -{ - protected $message; - - public function __construct($message) - { - $this->message = $message; - } - - public function run() - { - throw new RuntimeException($this->message); - } -} diff --git a/lib/composer/vendor/consolidation/robo/examples/robo.script b/lib/composer/vendor/consolidation/robo/examples/robo.script deleted file mode 100755 index bfec26a9..00000000 --- a/lib/composer/vendor/consolidation/robo/examples/robo.script +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env robo -say("This is a Robo script, $name"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/robo b/lib/composer/vendor/consolidation/robo/robo index ce4d9dfa..2093bd11 100755 --- a/lib/composer/vendor/consolidation/robo/robo +++ b/lib/composer/vendor/consolidation/robo/robo @@ -17,5 +17,6 @@ if (strpos(basename(__FILE__), 'phar')) { } } $runner = new \Robo\Runner(); +$runner->setSelfUpdateRepository('consolidation/robo'); $statusCode = $runner->execute($_SERVER['argv']); exit($statusCode); diff --git a/lib/composer/vendor/consolidation/robo/robo.yml b/lib/composer/vendor/consolidation/robo/robo.yml new file mode 100644 index 00000000..12fb4f61 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/robo.yml @@ -0,0 +1,3 @@ +options: + progress-delay: 2 + simulate: null diff --git a/lib/composer/vendor/consolidation/robo/scenarios/install b/lib/composer/vendor/consolidation/robo/scenarios/install new file mode 100755 index 00000000..e921ec0c --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/install @@ -0,0 +1,28 @@ +#!/bin/bash + +SCENARIO=$1 +ACTION=${2-install} + +dir=scenarios/${SCENARIO} +if [ -z "$SCENARIO" ] ; then + SCENARIO=default + dir=. +fi + + +if [ ! -d "$dir" ] ; then + echo "Requested scenario '${SCENARIO}' does not exist." + exit 1 +fi + +echo +echo "::" +echo ":: Switch to ${SCENARIO} scenario" +echo "::" +echo + +set -ex + +composer -n validate --working-dir=$dir --no-check-all --ansi +composer -n --working-dir=$dir ${ACTION} --prefer-dist --no-scripts +composer -n --working-dir=$dir info diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony2/.gitignore b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/.gitignore new file mode 100644 index 00000000..7579f743 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/.gitignore @@ -0,0 +1,2 @@ +vendor +composer.lock diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony2/composer.json b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/composer.json new file mode 100644 index 00000000..6a642933 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/composer.json @@ -0,0 +1,93 @@ +{ + "name": "consolidation/robo", + "description": "Modern task runner", + "license": "MIT", + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "autoload":{ + "psr-4":{ + "Robo\\":"src" + } + }, + "autoload-dev":{ + "psr-4":{ + "Robo\\":"tests/src" + } + }, + "bin":["robo"], + "require": { + "php": ">=5.5.0", + "league/container": "^2.2", + "consolidation/log": "~1", + "consolidation/config": "^1.0.1", + "consolidation/annotated-command": "^2.8.2", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4" + }, + "require-dev": { + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", + "codeception/verify": "^0.3.2", + "greg-1-anderson/composer-test-scenarios": "^1", + "natxet/CssMin": "3.0.4", + "patchwork/jsqueeze": "~2", + "pear/archive_tar": "^1.4.2", + "phpunit/php-code-coverage": "~2|~4", + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "^2.8", + "symfony/console": "^2.8" + }, + "scripts": { + "cs": "./robo sniff", + "unit": "./robo test", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "pre-install-cmd": [ + "Robo\\composer\\ScriptHandler::checkDependencies" + ], + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0' --platform-php '7.1.3'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.5.9' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.5.9" + }, + "vendor-dir": "../../vendor" + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" + } + }, + "suggest": { + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively.", + "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", + "patchwork/jsqueeze": "For minifying JS files in taskMinify", + "natxet/CssMin": "For minifying CSS files in taskMinify" + }, + "replace": { + "codegyre/robo": "< 1.0" + }, + "minimum-stability": "stable" +} diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony2/src b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/src new file mode 120000 index 00000000..929cb3dc --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony2/tests/.gitkeep b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/tests/.gitkeep new file mode 100644 index 00000000..54bcf304 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/tests/.gitkeep @@ -0,0 +1 @@ +~ diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitignore b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitignore new file mode 100644 index 00000000..22d0d82f --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitignore @@ -0,0 +1 @@ +vendor diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitkeep b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitkeep new file mode 100644 index 00000000..54bcf304 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitkeep @@ -0,0 +1 @@ +~ diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.json b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.json new file mode 100644 index 00000000..6e1c6114 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.json @@ -0,0 +1,93 @@ +{ + "name": "consolidation/robo", + "description": "Modern task runner", + "license": "MIT", + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "autoload":{ + "psr-4":{ + "Robo\\":"src" + } + }, + "autoload-dev":{ + "psr-4":{ + "Robo\\":"tests/src" + } + }, + "bin":["robo"], + "require": { + "php": ">=5.5.0", + "league/container": "^2.2", + "consolidation/log": "~1", + "consolidation/config": "^1.0.1", + "consolidation/annotated-command": "^2.8.2", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4" + }, + "require-dev": { + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", + "codeception/verify": "^0.3.2", + "greg-1-anderson/composer-test-scenarios": "^1", + "natxet/CssMin": "3.0.4", + "patchwork/jsqueeze": "~2", + "pear/archive_tar": "^1.4.2", + "phpunit/php-code-coverage": "~2|~4", + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "^2.8", + "symfony/console": "^4.0" + }, + "scripts": { + "cs": "./robo sniff", + "unit": "./robo test", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "pre-install-cmd": [ + "Robo\\composer\\ScriptHandler::checkDependencies" + ], + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0' --platform-php '7.1.3'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.5.9' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "7.1.3" + }, + "vendor-dir": "../../vendor" + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" + } + }, + "suggest": { + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively.", + "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", + "patchwork/jsqueeze": "For minifying JS files in taskMinify", + "natxet/CssMin": "For minifying CSS files in taskMinify" + }, + "replace": { + "codegyre/robo": "< 1.0" + }, + "minimum-stability": "stable" +} diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.lock b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.lock new file mode 100644 index 00000000..331dac08 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.lock @@ -0,0 +1,3813 @@ +{ + "_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": "e2d42097d21dbc2b1344779e3995a774", + "packages": [ + { + "name": "consolidation/annotated-command", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/consolidation/annotated-command.git", + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/e97c38717eae23a2bafcf3f09438290eee6ebeb4", + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4", + "shasum": "" + }, + "require": { + "consolidation/output-formatters": "^3.1.12", + "php": ">=5.4.0", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\AnnotatedCommand\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Initialize Symfony Console commands from annotated command class methods.", + "time": "2017-11-29T16:23:23+00:00" + }, + { + "name": "consolidation/config", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/consolidation/config.git", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/config/zipball/34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Provide configuration services for a commandline tool.", + "time": "2017-12-22T17:28:19+00:00" + }, + { + "name": "consolidation/log", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/consolidation/log.git", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/log/zipball/dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "psr/log": "~1.0", + "symfony/console": "^2.8|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", + "squizlabs/php_codesniffer": "2.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", + "time": "2017-11-29T01:44:16+00:00" + }, + { + "name": "consolidation/output-formatters", + "version": "3.1.13", + "source": { + "type": "git", + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\OutputFormatters\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Format text by applying transformations provided by plug-in formatters.", + "time": "2017-11-29T15:25:38+00:00" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" + }, + { + "name": "grasmash/yaml-expander", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in a yaml file.", + "time": "2017-12-16T16:06:03+00:00" + }, + { + "name": "league/container", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" + }, + "replace": { + "orno/di": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Container\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", + "role": "Developer" + } + ], + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", + "keywords": [ + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" + ], + "time": "2017-05-10T09:20:27+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "symfony/console", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/de8cf039eacdec59d83f7def67e3b8ff5ed46714", + "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714", + "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": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "d4face19ed8002eec8280bc1c5ec18130472bf43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d4face19ed8002eec8280bc1c5ec18130472bf43", + "reference": "d4face19ed8002eec8280bc1c5ec18130472bf43", + "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": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c2868641d0c4885eee9c12a89c2b695eb1985cd", + "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/dac8d7db537bac7ad8143eb11360a8c2231f251a", + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-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": "2017-11-05T16:10:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-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": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/process", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "18d1953068e72262830bad593f0366fa62c93fb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/18d1953068e72262830bad593f0366fa62c93fb7", + "reference": "18d1953068e72262830bad593f0366fa62c93fb7", + "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": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "a5ee52d155f06ad23b19eb63c31228ff56ad1116" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a5ee52d155f06ad23b19eb63c31228ff56ad1116", + "reference": "a5ee52d155f06ad23b19eb63c31228ff56ad1116", + "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": "2017-12-12T08:41:51+00:00" + } + ], + "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/aspect-mock", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/AspectMock.git", + "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba", + "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba", + "shasum": "" + }, + "require": { + "goaop/framework": "^2.0.0", + "php": ">=5.6.0", + "symfony/finder": "~2.4|~3.0" + }, + "require-dev": { + "codeception/base": "~2.1", + "codeception/specify": "~0.3", + "codeception/verify": "~0.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "AspectMock": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@codeception.com" + } + ], + "description": "Experimental Mocking Framework powered by Aspects", + "time": "2017-10-24T10:20:17+00:00" + }, + { + "name": "codeception/base", + "version": "2.3.7", + "source": { + "type": "git", + "url": "https://github.com/Codeception/base.git", + "reference": "c3fcea61525e62361ecc45aea1837f225ba73b4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/base/zipball/c3fcea61525e62361ecc45aea1837f225ba73b4f", + "reference": "c3fcea61525e62361ecc45aea1837f225ba73b4f", + "shasum": "" + }, + "require": { + "behat/gherkin": "~4.4.0", + "ext-json": "*", + "ext-mbstring": "*", + "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", + "phpunit/phpunit-mock-objects": ">2.3 <5.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", + "league/factory-muffin": "^3.0", + "league/factory-muffin-faker": "^1.0", + "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": "2017-12-12T04:54:15+00:00" + }, + { + "name": "codeception/verify", + "version": "0.3.3", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Verify.git", + "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Verify/zipball/5d649dda453cd814dadc4bb053060cd2c6bb4b4c", + "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Codeception/function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert.php@mailican.com" + } + ], + "description": "BDD assertion library for PHPUnit", + "time": "2017-01-09T10:58:51+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-12-06T07:11:42+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": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "goaop/framework", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/goaop/framework.git", + "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/goaop/framework/zipball/6e2a0fe13c1943db02a67588cfd27692bddaffa5", + "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5", + "shasum": "" + }, + "require": { + "doctrine/annotations": "~1.0", + "goaop/parser-reflection": "~1.2", + "jakubledl/dissect": "~1.0", + "php": ">=5.6.0" + }, + "require-dev": { + "adlawson/vfs": "^0.12", + "doctrine/orm": "^2.5", + "phpunit/phpunit": "^4.8", + "symfony/console": "^2.7|^3.0" + }, + "suggest": { + "symfony/console": "Enables the usage of the command-line tool." + }, + "bin": [ + "bin/aspect" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Go\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lisachenko Alexander", + "homepage": "https://github.com/lisachenko" + } + ], + "description": "Framework for aspect-oriented programming in PHP.", + "homepage": "http://go.aopphp.com/", + "keywords": [ + "aop", + "aspect", + "library", + "php" + ], + "time": "2017-07-12T11:46:25+00:00" + }, + { + "name": "goaop/parser-reflection", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/goaop/parser-reflection.git", + "reference": "adfc38fee63014880932ebcc4810871b8e33edc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/goaop/parser-reflection/zipball/adfc38fee63014880932ebcc4810871b8e33edc9", + "reference": "adfc38fee63014880932ebcc4810871b8e33edc9", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.2|^2.0|^3.0", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Go\\ParserReflection\\": "src" + }, + "files": [ + "src/bootstrap.php" + ], + "exclude-from-classmap": [ + "/tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Lisachenko", + "email": "lisachenko.it@gmail.com" + } + ], + "description": "Provides reflection information, based on raw source", + "time": "2017-09-03T14:59:13+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+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": "jakubledl/dissect", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/jakubledl/dissect.git", + "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jakubledl/dissect/zipball/d3a391de31e45a247e95cef6cf58a91c05af67c4", + "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/console": "~2.1" + }, + "suggest": { + "symfony/console": "for the command-line tool" + }, + "bin": [ + "bin/dissect.php", + "bin/dissect" + ], + "type": "library", + "autoload": { + "psr-0": { + "Dissect": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "unlicense" + ], + "authors": [ + { + "name": "Jakub Lédl", + "email": "jakubledl@gmail.com" + } + ], + "description": "Lexing and parsing in pure PHP", + "homepage": "https://github.com/jakubledl/dissect", + "keywords": [ + "ast", + "lexing", + "parser", + "parsing" + ], + "time": "2013-01-29T21:29:14+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": "natxet/CssMin", + "version": "v3.0.4", + "source": { + "type": "git", + "url": "https://github.com/natxet/CssMin.git", + "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39", + "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39", + "shasum": "" + }, + "require": { + "php": ">=5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joe Scylla", + "email": "joe.scylla@gmail.com", + "homepage": "https://profiles.google.com/joe.scylla" + } + ], + "description": "Minifying CSS", + "homepage": "http://code.google.com/p/cssmin/", + "keywords": [ + "css", + "minify" + ], + "time": "2015-09-25T11:13:11+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v3.1.3", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/579f4ce846734a1cf55d6a531d00ca07a43e3cda", + "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2017-12-26T14:43:21+00:00" + }, + { + "name": "patchwork/jsqueeze", + "version": "v2.0.5", + "source": { + "type": "git", + "url": "https://github.com/tchwork/jsqueeze.git", + "reference": "693d64850eab2ce6a7c8f7cf547e1ab46e69d542" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tchwork/jsqueeze/zipball/693d64850eab2ce6a7c8f7cf547e1ab46e69d542", + "reference": "693d64850eab2ce6a7c8f7cf547e1ab46e69d542", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Patchwork\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "(Apache-2.0 or GPL-2.0)" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + } + ], + "description": "Efficient JavaScript minification in PHP", + "homepage": "https://github.com/tchwork/jsqueeze", + "keywords": [ + "compression", + "javascript", + "minification" + ], + "time": "2016-04-19T09:28:22+00:00" + }, + { + "name": "pear/archive_tar", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/pear/Archive_Tar.git", + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "shasum": "" + }, + "require": { + "pear/pear-core-minimal": "^1.10.0alpha2", + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "ext-bz2": "bz2 compression support.", + "ext-xz": "lzma2 compression support.", + "ext-zlib": "Gzip compression support." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Archive_Tar": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Vincent Blavet", + "email": "vincent@phpconcept.net" + }, + { + "name": "Greg Beaver", + "email": "greg@chiaraquartet.net" + }, + { + "name": "Michiel Rook", + "email": "mrook@php.net" + } + ], + "description": "Tar file management class", + "homepage": "https://github.com/pear/Archive_Tar", + "keywords": [ + "archive", + "tar" + ], + "time": "2017-06-11T17:28:11+00:00" + }, + { + "name": "pear/console_getopt", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/pear/Console_Getopt.git", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Console": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" + }, + { + "name": "Andrei Zmievski", + "email": "andrei@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Developer" + } + ], + "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "time": "2015-07-20T20:28:12+00:00" + }, + { + "name": "pear/pear-core-minimal", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/pear/pear-core-minimal.git", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", + "shasum": "" + }, + "require": { + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" + }, + "replace": { + "rsky/pear-core-min": "self.version" + }, + "type": "library", + "autoload": { + "psr-0": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "src/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@php.net", + "role": "Lead" + } + ], + "description": "Minimal set of PEAR core files to be used as composer dependency", + "time": "2017-02-28T16:46:11+00:00" + }, + { + "name": "pear/pear_exception", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", + "shasum": "" + }, + "require": { + "php": ">=4.4.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "class", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "PEAR": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "." + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", + "keywords": [ + "exception" + ], + "time": "2015-02-10T20:07:52+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.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "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-27T17:38:31+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": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" + }, + "require-dev": { + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" + }, + "suggest": { + "ext-xdebug": "^2.5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.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": "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-04-02T07:44:40+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": "5.7.26", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd", + "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0.3|~2.0", + "symfony/yaml": "~2.1|~3.0|~4.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.7.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": "2017-12-17T06:14:38+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2017-06-30T09:13:00+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": "satooshi/php-coveralls", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3eaf7eb689cdf6b86801a3843940d974dc657068", + "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/php-coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-12-08T14:28:16+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": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "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.4-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-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "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" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-11-26T07:53:53+00:00" + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-11-19T08:54:04+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "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" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-02-18T15:18:39+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-11-19T07:33:16+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": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "67359d6a03f96f9d15b956013fade2bd271de75a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/67359d6a03f96f9d15b956013fade2bd271de75a", + "reference": "67359d6a03f96f9d15b956013fade2bd271de75a", + "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": "2017-12-12T08:41:51+00:00" + }, + { + "name": "symfony/config", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/0356e6d5298e9e72212c0bad65c2f1b49e42d622", + "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 Config Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "2b71219bf15530f293f6a9262de841d0ca90b11c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/2b71219bf15530f293f6a9262de841d0ca90b11c", + "reference": "2b71219bf15530f293f6a9262de841d0ca90b11c", + "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": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "9f207697b4aa664823f43b6568797c48316b621a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/9f207697b4aa664823f43b6568797c48316b621a", + "reference": "9f207697b4aa664823f43b6568797c48316b621a", + "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": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-09T12:45:29+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.5.0" + }, + "platform-dev": [], + "platform-overrides": { + "php": "7.1.3" + } +} diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/src b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/src new file mode 120000 index 00000000..929cb3dc --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/src/Application.php b/lib/composer/vendor/consolidation/robo/src/Application.php index e6664b5d..19d4725f 100644 --- a/lib/composer/vendor/consolidation/robo/src/Application.php +++ b/lib/composer/vendor/consolidation/robo/src/Application.php @@ -3,8 +3,6 @@ namespace Robo; use Symfony\Component\Console\Application as SymfonyApplication; use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; class Application extends SymfonyApplication @@ -25,6 +23,11 @@ class Application extends SymfonyApplication ->addOption( new InputOption('--progress-delay', null, InputOption::VALUE_REQUIRED, 'Number of seconds before progress bar is displayed in long-running task collections. Default: 2s.', Config::DEFAULT_PROGRESS_DELAY) ); + + $this->getDefinition() + ->addOption( + new InputOption('--define', '-D', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Define a configuration item value.', []) + ); } /** @@ -53,4 +56,18 @@ class Application extends SymfonyApplication }); $this->add($createRoboFile); } + + /** + * Add self update command, do nothing if null is provided + * + * @param string $repository GitHub Repository for self update + */ + public function addSelfUpdateCommand($repository = null) + { + if (!$repository) { + return; + } + $selfUpdateCommand = new SelfUpdateCommand($this->getName(), $this->getVersion(), $repository); + $this->add($selfUpdateCommand); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/CallableTask.php b/lib/composer/vendor/consolidation/robo/src/Collection/CallableTask.php index 8ae3a330..ae9c54fc 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/CallableTask.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/CallableTask.php @@ -3,7 +3,8 @@ namespace Robo\Collection; use Robo\Result; use Robo\Contract\TaskInterface; -use Robo\Collection\Collection; +use Robo\State\StateAwareInterface; +use Robo\State\Data; /** * Creates a task wrapper that converts any Callable into an @@ -35,7 +36,7 @@ class CallableTask implements TaskInterface */ public function run() { - $result = call_user_func($this->fn); + $result = call_user_func($this->fn, $this->getState()); // If the function returns no result, then count it // as a success. if (!isset($result)) { @@ -50,4 +51,12 @@ class CallableTask implements TaskInterface return $result; } + + public function getState() + { + if ($this->reference instanceof StateAwareInterface) { + return $this->reference->getState(); + } + return new Data(); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/Collection.php b/lib/composer/vendor/consolidation/robo/src/Collection/Collection.php index 5458c8a5..607435a4 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/Collection.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/Collection.php @@ -2,6 +2,7 @@ namespace Robo\Collection; use Robo\Result; +use Robo\State\Data; use Psr\Log\LogLevel; use Robo\Contract\TaskInterface; use Robo\Task\StackBasedTask; @@ -12,9 +13,9 @@ use Robo\Exception\TaskException; use Robo\Exception\TaskExitException; use Robo\Contract\CommandInterface; - -use Robo\Common\ProgressIndicatorAwareTrait; use Robo\Contract\InflectionInterface; +use Robo\State\StateAwareInterface; +use Robo\State\StateAwareTrait; /** * Group tasks into a collection that run together. Supports @@ -30,8 +31,10 @@ use Robo\Contract\InflectionInterface; * called. Here, taskDeleteDir is used to remove partial results * of an unfinished task. */ -class Collection extends BaseTask implements CollectionInterface, CommandInterface +class Collection extends BaseTask implements CollectionInterface, CommandInterface, StateAwareInterface { + use StateAwareTrait; + /** * @var \Robo\Collection\Element[] */ @@ -52,11 +55,22 @@ class Collection extends BaseTask implements CollectionInterface, CommandInterfa */ protected $parentCollection; + /** + * @var callable[] + */ + protected $deferredCallbacks = []; + + /** + * @var string[] + */ + protected $messageStoreKeys = []; + /** * Constructor. */ public function __construct() { + $this->resetState(); } public function setProgressBarAutoDisplayInterval($interval) @@ -165,6 +179,7 @@ class Collection extends BaseTask implements CollectionInterface, CommandInterfa $context += TaskInfo::getTaskContext($this); return $this->addCode( function () use ($level, $text, $context) { + $context += $this->getState()->getData(); $this->printTaskOutput($level, $text, $context); } ); @@ -552,6 +567,8 @@ class Collection extends BaseTask implements CollectionInterface, CommandInterfa // the incremental results, if they wish. $key = Result::isUnnamed($taskName) ? $name : $taskName; $result->accumulate($key, $taskResult); + // The result message will be the message of the last task executed. + $result->setMessage($taskResult->getMessage()); } } catch (TaskExitException $exitException) { $this->fail(); @@ -632,10 +649,79 @@ class Collection extends BaseTask implements CollectionInterface, CommandInterfa if ($original instanceof InflectionInterface) { $original->inflect($this); } + if ($original instanceof StateAwareInterface) { + $original->setState($this->getState()); + } + $this->doDeferredInitialization($original); $taskResult = $task->run(); + $taskResult = Result::ensureResult($task, $taskResult); + $this->doStateUpdates($original, $taskResult); return $taskResult; } + protected function doStateUpdates($task, Data $taskResult) + { + $this->updateState($taskResult); + $key = spl_object_hash($task); + if (array_key_exists($key, $this->messageStoreKeys)) { + $state = $this->getState(); + list($stateKey, $sourceKey) = $this->messageStoreKeys[$key]; + $value = empty($sourceKey) ? $taskResult->getMessage() : $taskResult[$sourceKey]; + $state[$stateKey] = $value; + } + } + + public function storeState($task, $key, $source = '') + { + $this->messageStoreKeys[spl_object_hash($task)] = [$key, $source]; + + return $this; + } + + public function deferTaskConfiguration($task, $functionName, $stateKey) + { + return $this->defer( + $task, + function ($task, $state) use ($functionName, $stateKey) { + $fn = [$task, $functionName]; + $value = $state[$stateKey]; + $fn($value); + } + ); + } + + /** + * Defer execution of a callback function until just before a task + * runs. Use this time to provide more settings for the task, e.g. from + * the collection's shared state, which is populated with the results + * of previous test runs. + */ + public function defer($task, $callback) + { + $this->deferredCallbacks[spl_object_hash($task)][] = $callback; + + return $this; + } + + protected function doDeferredInitialization($task) + { + // If the task is a state consumer, then call its receiveState method + if ($task instanceof \Robo\State\Consumer) { + $task->receiveState($this->getState()); + } + + // Check and see if there are any deferred callbacks for this task. + $key = spl_object_hash($task); + if (!array_key_exists($key, $this->deferredCallbacks)) { + return; + } + + // Call all of the deferred callbacks + foreach ($this->deferredCallbacks[$key] as $fn) { + $fn($task, $this->getState()); + } + } + /** * @param TaskInterface|NestedCollectionInterface|WrappedTaskInterface $task * @param $parentCollection diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/CollectionBuilder.php b/lib/composer/vendor/consolidation/robo/src/Collection/CollectionBuilder.php index 9b4d5180..3e037b01 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/CollectionBuilder.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/CollectionBuilder.php @@ -1,26 +1,22 @@ commandFile = $commandFile; + $this->resetState(); + } + + public static function create($container, $commandFile) + { + $builder = new self($commandFile); + + $builder->setLogger($container->get('logger')); + $builder->setProgressIndicator($container->get('progressIndicator')); + $builder->setConfig($container->get('config')); + $builder->setOutputAdapter($container->get('outputAdapter')); + + return $builder; } /** @@ -147,9 +158,18 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W return $this; } - public function addCode(callable $code) + /** + * Add arbitrary code to execute as a task. + * + * @see \Robo\Collection\CollectionInterface::addCode + * + * @param callable $code + * @param int|string $name + * @return $this + */ + public function addCode(callable $code, $name = \Robo\Collection\CollectionInterface::UNNAMEDTASK) { - $this->getCollection()->addCode($code); + $this->getCollection()->addCode($code, $name); return $this; } @@ -245,6 +265,51 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W return $this; } + public function getState() + { + $collection = $this->getCollection(); + return $collection->getState(); + } + + public function storeState($key, $source = '') + { + return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args()); + } + + public function deferTaskConfiguration($functionName, $stateKey) + { + return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args()); + } + + public function defer($callback) + { + return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args()); + } + + protected function callCollectionStateFuntion($functionName, $args) + { + $currentTask = ($this->currentTask instanceof WrappedTaskInterface) ? $this->currentTask->original() : $this->currentTask; + + array_unshift($args, $currentTask); + $collection = $this->getCollection(); + $fn = [$collection, $functionName]; + + call_user_func_array($fn, $args); + return $this; + } + + public function setVerbosityThreshold($verbosityThreshold) + { + $currentTask = ($this->currentTask instanceof WrappedTaskInterface) ? $this->currentTask->original() : $this->currentTask; + if ($currentTask) { + $currentTask->setVerbosityThreshold($verbosityThreshold); + return $this; + } + parent::setVerbosityThreshold($verbosityThreshold); + return $this; + } + + /** * Return the current task for this collection builder. * TODO: Not needed? @@ -266,6 +331,9 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W $collectionBuilder = new self($this->commandFile); $collectionBuilder->inflect($this); $collectionBuilder->simulated($this->isSimulated()); + $collectionBuilder->setVerbosityThreshold($this->verbosityThreshold()); + $collectionBuilder->setState($this->getState()); + return $collectionBuilder; } @@ -355,6 +423,7 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W throw new RuntimeException("Can not construct task $name"); } $task = $this->fixTask($task, $args); + $this->configureTask($name, $task); return $this->addTaskToCollection($task); } @@ -366,10 +435,15 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W */ protected function fixTask($task, $args) { - $task->inflect($this); + if ($task instanceof InflectionInterface) { + $task->inflect($this); + } if ($task instanceof BuilderAwareInterface) { $task->setBuilder($this); } + if ($task instanceof VerbosityThresholdInterface) { + $task->setVerbosityThreshold($this->verbosityThreshold()); + } // Do not wrap our wrappers. if ($task instanceof CompletionWrapper || $task instanceof Simulator) { @@ -402,6 +476,25 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W return $task; } + /** + * Check to see if there are any setter methods defined in configuration + * for this task. + */ + protected function configureTask($taskClass, $task) + { + $taskClass = static::configClassIdentifier($taskClass); + $configurationApplier = new ConfigForSetters($this->getConfig(), $taskClass, 'task.'); + $configurationApplier->apply($task, 'settings'); + + // TODO: If we counted each instance of $taskClass that was called from + // this builder, then we could also apply configuration from + // "task.{$taskClass}[$N].settings" + + // TODO: If the builder knew what the current command name was, + // then we could also search for task configuration under + // command-specific keys such as "command.{$commandname}.task.{$taskClass}.settings". + } + /** * When we run the collection builder, run everything in the collection. * @@ -413,6 +506,7 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W $result = $this->runTasks(); $this->stopTimer(); $result['time'] = $this->getExecutionTime(); + $result->mergeData($this->getState()->getData()); return $result; } @@ -425,7 +519,8 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W protected function runTasks() { if (!$this->collection && $this->currentTask) { - return $this->currentTask->run(); + $result = $this->currentTask->run(); + return Result::ensureResult($this->currentTask, $result); } return $this->getCollection()->run(); } @@ -464,6 +559,7 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W if (!isset($this->collection)) { $this->collection = new Collection(); $this->collection->inflect($this); + $this->collection->setState($this->getState()); $this->collection->setProgressBarAutoDisplayInterval($this->getConfig()->get(Config::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL)); if (isset($this->currentTask)) { diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/CollectionInterface.php b/lib/composer/vendor/consolidation/robo/src/Collection/CollectionInterface.php index b3a34f4e..173ca169 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/CollectionInterface.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/CollectionInterface.php @@ -141,7 +141,8 @@ interface CollectionInterface extends NestedCollectionInterface * message will not be printed. * * @param string $text Message to print. - * @param array $context Extra context data for use by the logger. + * @param array $context Extra context data for use by the logger. Note + * that the data from the collection state is merged with the provided context. * @param \Psr\Log\LogLevel|string $level The log level to print the information at. Default is NOTICE. * * @return $this diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php b/lib/composer/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php index 73d26282..5e32cf37 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php @@ -1,9 +1,6 @@ arguments .= " $arg"; + + return $this; } /** @@ -74,36 +78,51 @@ trait CommandArguments * * @param string $option * @param string $value + * @param string $separator * * @return $this */ - public function option($option, $value = null) + public function option($option, $value = null, $separator = ' ') { if ($option !== null and strpos($option, '-') !== 0) { $option = "--$option"; } $this->arguments .= null == $option ? '' : " " . $option; - $this->arguments .= null == $value ? '' : " " . static::escape($value); + $this->arguments .= null == $value ? '' : $separator . static::escape($value); return $this; } /** - * Pass multiple options to executable. Value can be a string or array. + * Pass multiple options to executable. The associative array contains + * the key:value pairs that become `--key value`, for each item in the array. + * Values are automatically escaped. + */ + public function options(array $options, $separator = ' ') + { + foreach ($options as $option => $value) { + $this->option($option, $value, $separator); + } + return $this; + } + + /** + * Pass an option with multiple values to executable. Value can be a string or array. * Option values are automatically escaped. * * @param string $option * @param string|array $value + * @param string $separator * * @return $this */ - public function optionList($option, $value = array()) + public function optionList($option, $value = array(), $separator = ' ') { if (is_array($value)) { foreach ($value as $item) { - $this->optionList($option, $item); + $this->optionList($option, $item, $separator); } } else { - $this->option($option, $value); + $this->option($option, $value, $separator); } return $this; diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php b/lib/composer/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php index 8f8ba48c..d6d45788 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php @@ -3,25 +3,25 @@ namespace Robo\Common; use Robo\Robo; -use Robo\Config; +use Consolidation\Config\ConfigInterface; trait ConfigAwareTrait { /** - * @var \Robo\Config + * @var ConfigInterface */ protected $config; /** * Set the config management object. * - * @param \Robo\Config $config + * @param ConfigInterface $config * * @return $this * * @see \Robo\Contract\ConfigAwareInterface::setConfig() */ - public function setConfig(Config $config) + public function setConfig(ConfigInterface $config) { $this->config = $config; @@ -31,7 +31,7 @@ trait ConfigAwareTrait /** * Get the config management object. * - * @return \Robo\Config + * @return ConfigInterface * * @see \Robo\Contract\ConfigAwareInterface::getConfig() */ @@ -40,6 +40,32 @@ trait ConfigAwareTrait return $this->config; } + /** + * Any class that uses ConfigAwareTrait SHOULD override this method + * , and define a prefix for its configuration items. This is usually + * done in a base class. When used, this method should return a string + * that ends with a "."; see BaseTask::configPrefix(). + * + * @return string + */ + protected static function configPrefix() + { + return ''; + } + + protected static function configClassIdentifier($classname) + { + $configIdentifier = strtr($classname, '\\', '.'); + $configIdentifier = preg_replace('#^(.*\.Task\.|\.)#', '', $configIdentifier); + + return $configIdentifier; + } + + protected static function configPostfix() + { + return ''; + } + /** * @param string $key * @@ -47,18 +73,24 @@ trait ConfigAwareTrait */ private static function getClassKey($key) { - return sprintf('%s.%s', get_called_class(), $key); + $configPrefix = static::configPrefix(); // task. + $configClass = static::configClassIdentifier(get_called_class()); // PARTIAL_NAMESPACE.CLASSNAME + $configPostFix = static::configPostfix(); // .settings + + return sprintf('%s%s%s.%s', $configPrefix, $configClass, $configPostFix, $key); } /** * @param string $key * @param mixed $value - * - * @deprecated + * @param Config|null $config */ - public static function configure($key, $value) + public static function configure($key, $value, $config = null) { - Robo::config()->set(static::getClassKey($key), $value); + if (!$config) { + $config = Robo::config(); + } + $config->setDefault(static::getClassKey($key), $value); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ExecCommand.php b/lib/composer/vendor/consolidation/robo/src/Common/ExecCommand.php index ad4c4093..c3e6c3af 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/ExecCommand.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/ExecCommand.php @@ -11,15 +11,7 @@ use Symfony\Component\Process\Process; */ trait ExecCommand { - /** - * @var bool - */ - protected $isPrinted = true; - - /** - * @var string - */ - protected $workingDirectory; + use ExecTrait; /** * @var \Robo\Common\TimeKeeper @@ -37,45 +29,6 @@ trait ExecCommand return $this->execTimer; } - /** - * Is command printing its output to screen - * - * @return bool - */ - public function getPrinted() - { - return $this->isPrinted; - } - - /** - * Changes working directory of command - * - * @param string $dir - * - * @return $this - */ - public function dir($dir) - { - $this->workingDirectory = $dir; - return $this; - } - - - /** - * Should command output be printed - * - * @param bool $arg - * - * @return $this - */ - public function printed($arg) - { - if (is_bool($arg)) { - $this->isPrinted = $arg; - } - return $this; - } - /** * Look for a "{$cmd}.phar" in the current working * directory; return a string to exec it if it is @@ -135,7 +88,8 @@ trait ExecCommand */ protected function findProjectBin() { - $candidates = [ __DIR__ . '/../../vendor/bin', __DIR__ . '/../../bin' ]; + $cwd = getcwd(); + $candidates = [ __DIR__ . '/../../vendor/bin', __DIR__ . '/../../bin', $cwd . '/vendor/bin' ]; // If this project is inside a vendor directory, give highest priority // to that directory. @@ -170,6 +124,11 @@ trait ExecCommand return $cmd; } + protected function getCommandDescription() + { + return $this->process->getCommandLine(); + } + /** * @param string $command * @@ -177,21 +136,13 @@ trait ExecCommand */ protected function executeCommand($command) { - $process = new Process($command); - $process->setTimeout(null); - if ($this->workingDirectory) { - $process->setWorkingDirectory($this->workingDirectory); - } - $this->getExecTimer()->start(); - if ($this->isPrinted) { - $process->run(function ($type, $buffer) { - print $buffer; - }); - } else { - $process->run(); - } - $this->getExecTimer()->stop(); - - return new Result($this, $process->getExitCode(), $process->getOutput(), ['time' => $this->getExecTimer()->elapsed()]); + // TODO: Symfony 4 requires that we supply the working directory. + $result_data = $this->execute(new Process($command, getcwd())); + return new Result( + $this, + $result_data->getExitCode(), + $result_data->getMessage(), + $result_data->getData() + ); } } diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ExecTrait.php b/lib/composer/vendor/consolidation/robo/src/Common/ExecTrait.php new file mode 100644 index 00000000..0dd1a6cd --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/ExecTrait.php @@ -0,0 +1,408 @@ +interactive() based on posix_isatty(). + * + * @return $this + */ + public function detectInteractive() + { + // If the caller did not explicity set the 'interactive' mode, + // and output should be produced by this task (verbosityMeetsThreshold), + // then we will automatically set interactive mode based on whether + // or not output was redirected when robo was executed. + if (!isset($this->interactive) && function_exists('posix_isatty') && $this->verbosityMeetsThreshold()) { + $this->interactive = posix_isatty(STDOUT); + } + + return $this; + } + + /** + * Executes command in background mode (asynchronously) + * + * @return $this + */ + public function background($arg = true) + { + $this->background = $arg; + return $this; + } + + /** + * Stop command if it runs longer then $timeout in seconds + * + * @param int $timeout + * + * @return $this + */ + public function timeout($timeout) + { + $this->timeout = $timeout; + return $this; + } + + /** + * Stops command if it does not output something for a while + * + * @param int $timeout + * + * @return $this + */ + public function idleTimeout($timeout) + { + $this->idleTimeout = $timeout; + return $this; + } + + /** + * Set a single environment variable, or multiple. + */ + public function env($env, $value = null) + { + if (!is_array($env)) { + $env = [$env => ($value ? $value : true)]; + } + return $this->envVars($env); + } + + /** + * Sets the environment variables for the command + * + * @param array $env + * + * @return $this + */ + public function envVars(array $env) + { + $this->env = $env; + return $this; + } + + /** + * Pass an input to the process. Can be resource created with fopen() or string + * + * @param resource|string $input + * + * @return $this + */ + public function setInput($input) + { + $this->input = $input; + return $this; + } + + /** + * Attach tty to process for interactive input + * + * @param $interactive bool + * + * @return $this + */ + public function interactive($interactive = true) + { + $this->interactive = $interactive; + return $this; + } + + + /** + * Is command printing its output to screen + * + * @return bool + */ + public function getPrinted() + { + return $this->isPrinted; + } + + /** + * Changes working directory of command + * + * @param string $dir + * + * @return $this + */ + public function dir($dir) + { + $this->workingDirectory = $dir; + return $this; + } + + /** + * Shortcut for setting isPrinted() and isMetadataPrinted() to false. + * + * @param bool $arg + * + * @return $this + */ + public function silent($arg) + { + if (is_bool($arg)) { + $this->isPrinted = !$arg; + $this->isMetadataPrinted = !$arg; + } + return $this; + } + + /** + * Should command output be printed + * + * @param bool $arg + * + * @return $this + * + * @deprecated + */ + public function printed($arg) + { + $this->logger->warning("printed() is deprecated. Please use printOutput()."); + return $this->printOutput($arg); + } + + /** + * Should command output be printed + * + * @param bool $arg + * + * @return $this + */ + public function printOutput($arg) + { + if (is_bool($arg)) { + $this->isPrinted = $arg; + } + return $this; + } + + /** + * Should command metadata be printed. I,e., command and timer. + * + * @param bool $arg + * + * @return $this + */ + public function printMetadata($arg) + { + if (is_bool($arg)) { + $this->isMetadataPrinted = $arg; + } + return $this; + } + + /** + * @param Process $process + * @param callable $output_callback + * + * @return \Robo\ResultData + */ + protected function execute($process, $output_callback = null) + { + $this->process = $process; + + if (!$output_callback) { + $output_callback = function ($type, $buffer) { + $progressWasVisible = $this->hideTaskProgress(); + $this->writeMessage($buffer); + $this->showTaskProgress($progressWasVisible); + }; + } + + $this->detectInteractive(); + + if ($this->isMetadataPrinted) { + $this->printAction(); + } + $this->process->setTimeout($this->timeout); + $this->process->setIdleTimeout($this->idleTimeout); + if ($this->workingDirectory) { + $this->process->setWorkingDirectory($this->workingDirectory); + } + if ($this->input) { + $this->process->setInput($this->input); + } + + if ($this->interactive && $this->isPrinted) { + $this->process->setTty(true); + } + + if (isset($this->env)) { + $this->process->setEnv($this->env); + } + + if (!$this->background && !$this->isPrinted) { + $this->startTimer(); + $this->process->run(); + $this->stopTimer(); + $output = rtrim($this->process->getOutput()); + return new ResultData( + $this->process->getExitCode(), + $output, + $this->getResultData() + ); + } + + if (!$this->background && $this->isPrinted) { + $this->startTimer(); + $this->process->run($output_callback); + $this->stopTimer(); + return new ResultData( + $this->process->getExitCode(), + $this->process->getOutput(), + $this->getResultData() + ); + } + + try { + $this->process->start(); + } catch (\Exception $e) { + return new ResultData( + $this->process->getExitCode(), + $e->getMessage(), + $this->getResultData() + ); + } + return new ResultData($this->process->getExitCode()); + } + + /** + * + */ + protected function stop() + { + if ($this->background && isset($this->process) && $this->process->isRunning()) { + $this->process->stop(); + $this->printTaskInfo( + "Stopped {command}", + ['command' => $this->getCommandDescription()] + ); + } + } + + /** + * @param array $context + */ + protected function printAction($context = []) + { + $command = $this->getCommandDescription(); + $formatted_command = $this->formatCommandDisplay($command); + + $dir = $this->workingDirectory ? " in {dir}" : ""; + $this->printTaskInfo("Running {command}$dir", [ + 'command' => $formatted_command, + 'dir' => $this->workingDirectory + ] + $context); + } + + /** + * @param $command + * + * @return mixed + */ + protected function formatCommandDisplay($command) + { + $formatted_command = str_replace("&&", "&&\n", $command); + $formatted_command = str_replace("||", "||\n", $formatted_command); + + return $formatted_command; + } + + /** + * Gets the data array to be passed to Result(). + * + * @return array + * The data array passed to Result(). + */ + protected function getResultData() + { + if ($this->isMetadataPrinted) { + return ['time' => $this->getExecutionTime()]; + } + + return []; + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Common/IO.php b/lib/composer/vendor/consolidation/robo/src/Common/IO.php index 8da7b61d..d6c77bff 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/IO.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/IO.php @@ -1,12 +1,7 @@ getDialog()->ask($this->input(), $this->output(), $question); } @@ -153,7 +148,7 @@ trait IO * * @return string */ - private function formatQuestion($message) + protected function formatQuestion($message) { return "? $message "; } @@ -169,7 +164,7 @@ trait IO /** * @param $text */ - private function writeln($text) + protected function writeln($text) { $this->output()->writeln($text); } diff --git a/lib/composer/vendor/consolidation/robo/src/Common/OutputAdapter.php b/lib/composer/vendor/consolidation/robo/src/Common/OutputAdapter.php new file mode 100644 index 00000000..b8e795f2 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/OutputAdapter.php @@ -0,0 +1,38 @@ + OutputInterface::VERBOSITY_NORMAL, + VerbosityThresholdInterface::VERBOSITY_VERBOSE => OutputInterface::VERBOSITY_VERBOSE, + VerbosityThresholdInterface::VERBOSITY_VERY_VERBOSE => OutputInterface::VERBOSITY_VERY_VERBOSE, + VerbosityThresholdInterface::VERBOSITY_DEBUG => OutputInterface::VERBOSITY_DEBUG, + ]; + + public function verbosityMeetsThreshold($verbosityThreshold) + { + if (!isset($this->verbosityMap[$verbosityThreshold])) { + return true; + } + $verbosityThreshold = $this->verbosityMap[$verbosityThreshold]; + $verbosity = $this->output()->getVerbosity(); + + return $verbosity >= $verbosityThreshold; + } + + public function writeMessage($message) + { + $this->output()->write($message); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ProcessExecutor.php b/lib/composer/vendor/consolidation/robo/src/Common/ProcessExecutor.php new file mode 100644 index 00000000..f78a4775 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/ProcessExecutor.php @@ -0,0 +1,51 @@ +process = $process; + } + + public static function create($container, $process) + { + $processExecutor = new self($process); + + $processExecutor->setLogger($container->get('logger')); + $processExecutor->setProgressIndicator($container->get('progressIndicator')); + $processExecutor->setConfig($container->get('config')); + $processExecutor->setOutputAdapter($container->get('outputAdapter')); + + return $processExecutor; + } + + /** + * @return string + */ + protected function getCommandDescription() + { + return $this->process->getCommandLine(); + } + + public function run() + { + return $this->execute($this->process); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ProcessUtils.php b/lib/composer/vendor/consolidation/robo/src/Common/ProcessUtils.php new file mode 100644 index 00000000..7dc4e553 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/ProcessUtils.php @@ -0,0 +1,79 @@ + + */ + +namespace Robo\Common; + +use Symfony\Component\Process\Exception\InvalidArgumentException; + +/** + * ProcessUtils is a bunch of utility methods. We want to allow Robo 1.x + * to work with Symfony 4.x while remaining backwards compatibility. This + * requires us to replace some deprecated functionality removed in Symfony. + */ +class ProcessUtils +{ + /** + * This class should not be instantiated. + */ + private function __construct() + { + } + + /** + * Escapes a string to be used as a shell argument. + * + * @param string $argument The argument that will be escaped + * + * @return string The escaped argument + * + * @deprecated since version 3.3, to be removed in 4.0. Use a command line array or give env vars to the `Process::start/run()` method instead. + */ + public static function escapeArgument($argument) + { + @trigger_error('The '.__METHOD__.'() method is a copy of a method that was deprecated by Symfony 3.3 and removed in Symfony 4; it will be removed in Robo 2.0.', E_USER_DEPRECATED); + + //Fix for PHP bug #43784 escapeshellarg removes % from given string + //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows + //@see https://bugs.php.net/bug.php?id=43784 + //@see https://bugs.php.net/bug.php?id=49446 + if ('\\' === DIRECTORY_SEPARATOR) { + if ('' === $argument) { + return escapeshellarg($argument); + } + + $escapedArgument = ''; + $quote = false; + foreach (preg_split('/(")/', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) { + if ('"' === $part) { + $escapedArgument .= '\\"'; + } elseif (self::isSurroundedBy($part, '%')) { + // Avoid environment variable expansion + $escapedArgument .= '^%"'.substr($part, 1, -1).'"^%'; + } else { + // escape trailing backslash + if ('\\' === substr($part, -1)) { + $part .= '\\'; + } + $quote = true; + $escapedArgument .= $part; + } + } + if ($quote) { + $escapedArgument = '"'.$escapedArgument.'"'; + } + + return $escapedArgument; + } + + return "'".str_replace("'", "'\\''", $argument)."'"; + } + + private static function isSurroundedBy($arg, $char) + { + return 2 < strlen($arg) && $char === $arg[0] && $char === $arg[strlen($arg) - 1]; + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php b/lib/composer/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php index 5d33e6d0..060e039a 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php @@ -1,6 +1,9 @@ progressIndicator = $progressIndicator; + + return $this; } /** @@ -70,6 +77,10 @@ trait ProgressIndicatorAwareTrait protected function startProgressIndicator() { $this->startTimer(); + if ($this instanceof VerbosityThresholdInterface + && !$this->verbosityMeetsThreshold()) { + return; + } if (!$this->progressIndicator) { return; } diff --git a/lib/composer/vendor/consolidation/robo/src/Common/TaskIO.php b/lib/composer/vendor/consolidation/robo/src/Common/TaskIO.php index 57ebb6fe..49b5ccd8 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/TaskIO.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/TaskIO.php @@ -4,9 +4,7 @@ namespace Robo\Common; use Robo\Robo; use Robo\TaskInfo; use Consolidation\Log\ConsoleLogLevel; -use Robo\Common\ConfigAwareTrait; use Psr\Log\LoggerAwareTrait; -use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; use Robo\Contract\ProgressIndicatorAwareInterface; @@ -21,6 +19,7 @@ trait TaskIO { use LoggerAwareTrait; use ConfigAwareTrait; + use VerbosityThresholdTrait; /** * @return mixed|null|\Psr\Log\LoggerInterface @@ -137,6 +136,9 @@ trait TaskIO */ protected function printTaskOutput($level, $text, $context) { + if (!$this->verbosityMeetsThreshold()) { + return; + } $logger = $this->logger(); if (!$logger) { return; diff --git a/lib/composer/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php b/lib/composer/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php new file mode 100644 index 00000000..2fc51c22 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php @@ -0,0 +1,79 @@ +verbosityThreshold = $verbosityThreshold; + return $this; + } + + public function verbosityThreshold() + { + return $this->verbosityThreshold; + } + + public function setOutputAdapter(OutputAdapterInterface $outputAdapter) + { + $this->outputAdapter = $outputAdapter; + } + + /** + * @return OutputAdapterInterface + */ + public function outputAdapter() + { + return $this->outputAdapter; + } + + public function hasOutputAdapter() + { + return isset($this->outputAdapter); + } + + public function verbosityMeetsThreshold() + { + if ($this->hasOutputAdapter()) { + return $this->outputAdapter()->verbosityMeetsThreshold($this->verbosityThreshold()); + } + return true; + } + + /** + * Print a message if the selected verbosity level is over this task's + * verbosity threshhold. + */ + public function writeMessage($message) + { + if (!$this->verbosityMeetsThreshold()) { + return; + } + $this->outputAdapter()->writeMessage($message); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Config.php b/lib/composer/vendor/consolidation/robo/src/Config.php index 10e29eff..9e9370d8 100644 --- a/lib/composer/vendor/consolidation/robo/src/Config.php +++ b/lib/composer/vendor/consolidation/robo/src/Config.php @@ -1,122 +1,9 @@ config[$key])) { - return $this->config[$key]; - } - return $this->getDefault($key, $defaultOverride); - } - - /** - * Set a config value - * - * @param string $key - * @param mixed $value - * - * @return $this - */ - public function set($key, $value) - { - $this->config[$key] = $value; - return $this; - } - - /** - * Return an associative array containing all of the global configuration - * options and their default values. - * - * @return array - */ - public function getGlobalOptionDefaultValues() - { - $globalOptions = - [ - self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL => self::DEFAULT_PROGRESS_DELAY, - self::SIMULATE => false, - ]; - - return $globalOptions; - } - - /** - * Return the default value for a given configuration item. - * - * @param string $key - * @param mixed $defaultOverride - * - * @return mixed - */ - public function getDefault($key, $defaultOverride = null) - { - $globalOptions = $this->getGlobalOptionDefaultValues(); - return isset($globalOptions[$key]) ? $globalOptions[$key] : $defaultOverride; - } - - /** - * @return bool - */ - public function isSimulated() - { - return $this->get(self::SIMULATE); - } - - /** - * @param bool $simulated - * - * @return $this - */ - public function setSimulated($simulated = true) - { - return $this->set(self::SIMULATE, $simulated); - } - - /** - * @return bool - */ - public function isDecorated() - { - return $this->get(self::DECORATED); - } - - /** - * @param bool $decorated - * - * @return $this - */ - public function setDecorated($decorated = true) - { - return $this->set(self::DECORATED, $decorated); - } - - /** - * @param int $interval - * - * @return $this - */ - public function setProgressBarAutoDisplayInterval($interval) - { - return $this->set(self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL, $interval); - } } diff --git a/lib/composer/vendor/consolidation/robo/src/Config/Config.php b/lib/composer/vendor/consolidation/robo/src/Config/Config.php new file mode 100644 index 00000000..3da9e5a9 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Config/Config.php @@ -0,0 +1,130 @@ +defaults = $this->getGlobalOptionDefaultValues(); + } + + /** + * Return an associative array containing all of the global configuration + * options and their default values. + * + * @return array + */ + public function getGlobalOptionDefaultValues() + { + $globalOptions = + [ + self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL => self::DEFAULT_PROGRESS_DELAY, + self::SIMULATE => false, + ]; + return $this->trimPrefixFromGlobalOptions($globalOptions); + } + + /** + * Remove the 'options.' prefix from the global options list. + */ + protected function trimPrefixFromGlobalOptions($globalOptions) + { + $result = []; + foreach ($globalOptions as $option => $value) { + $option = str_replace('options.', '', $option); + $result[$option] = $value; + } + return $result; + } + + /** + * @deprecated Use $config->get(Config::SIMULATE) + * + * @return bool + */ + public function isSimulated() + { + return $this->get(self::SIMULATE); + } + + /** + * @deprecated Use $config->set(Config::SIMULATE, true) + * + * @param bool $simulated + * + * @return $this + */ + public function setSimulated($simulated = true) + { + return $this->set(self::SIMULATE, $simulated); + } + + /** + * @deprecated Use $config->get(Config::INTERACTIVE) + * + * @return bool + */ + public function isInteractive() + { + return $this->get(self::INTERACTIVE); + } + + /** + * @deprecated Use $config->set(Config::INTERACTIVE, true) + * + * @param bool $interactive + * + * @return $this + */ + public function setInteractive($interactive = true) + { + return $this->set(self::INTERACTIVE, $interactive); + } + + /** + * @deprecated Use $config->get(Config::DECORATED) + * + * @return bool + */ + public function isDecorated() + { + return $this->get(self::DECORATED); + } + + /** + * @deprecated Use $config->set(Config::DECORATED, true) + * + * @param bool $decorated + * + * @return $this + */ + public function setDecorated($decorated = true) + { + return $this->set(self::DECORATED, $decorated); + } + + /** + * @deprecated Use $config->set(Config::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL, $interval) + * + * @param int $interval + * + * @return $this + */ + public function setProgressBarAutoDisplayInterval($interval) + { + return $this->set(self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL, $interval); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php b/lib/composer/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php new file mode 100644 index 00000000..f7639455 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php @@ -0,0 +1,17 @@ +prefix = 'options'; + } + + /** + * Add a reference to the Symfony Console application object. + */ + public function setApplication($application) + { + $this->application = $application; + return $this; + } + + /** + * Stipulate the prefix to use for option injection. + * @param string $prefix + */ + public function setGlobalOptionsPrefix($prefix) + { + $this->prefix = $prefix; + return $this; + } + /** * {@inheritdoc} */ public static function getSubscribedEvents() { - return [ConsoleEvents::COMMAND => 'setGlobalOptions']; + return [ConsoleEvents::COMMAND => 'handleCommandEvent']; + } + + /** + * Run all of our individual operations when a command event is received. + */ + public function handleCommandEvent(ConsoleCommandEvent $event) + { + $this->setGlobalOptions($event); + $this->setConfigurationValues($event); } /** @@ -31,15 +73,74 @@ class GlobalOptionsEventListener implements EventSubscriberInterface, ConfigAwar { $config = $this->getConfig(); $input = $event->getInput(); - $globalOptions = $config->getGlobalOptionDefaultValues(); + $globalOptions = $config->get($this->prefix, []); + if ($config instanceof \Consolidation\Config\GlobalOptionDefaultValuesInterface) { + $globalOptions += $config->getGlobalOptionDefaultValues(); + } + + $globalOptions += $this->applicationOptionDefaultValues(); + + // Set any config value that has a defined global option (e.g. --simulate) foreach ($globalOptions as $option => $default) { $value = $input->hasOption($option) ? $input->getOption($option) : null; // Unfortunately, the `?:` operator does not differentate between `0` and `null` if (!isset($value)) { $value = $default; } - $config->set($option, $value); + $config->set($this->prefix . '.' . $option, $value); } } + + /** + * Examine the commandline --define / -D options, and apply the provided + * values to the active configuration. + * + * @param \Symfony\Component\Console\Event\ConsoleCommandEvent $event + */ + public function setConfigurationValues(ConsoleCommandEvent $event) + { + $config = $this->getConfig(); + $input = $event->getInput(); + + // Also set any `-D config.key=value` options from the commandline. + if ($input->hasOption('define')) { + $configDefinitions = $input->getOption('define'); + foreach ($configDefinitions as $value) { + list($key, $value) = $this->splitConfigKeyValue($value); + $config->set($key, $value); + } + } + } + + /** + * Split up the key=value config setting into its component parts. If + * the input string contains no '=' character, then the value will be 'true'. + * + * @param string $value + * @return array + */ + protected function splitConfigKeyValue($value) + { + $parts = explode('=', $value, 2); + $parts[] = true; + return $parts; + } + + /** + * Get default option values from the Symfony Console application, if + * it is available. + */ + protected function applicationOptionDefaultValues() + { + if (!$this->application) { + return []; + } + + $result = []; + foreach ($this->application->getDefinition()->getOptions() as $key => $option) { + $result[$key] = $option->acceptValue() ? $option->getDefault() : null; + } + return $result; + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Log/ResultPrinter.php b/lib/composer/vendor/consolidation/robo/src/Log/ResultPrinter.php index ef2218f5..a6f166a0 100644 --- a/lib/composer/vendor/consolidation/robo/src/Log/ResultPrinter.php +++ b/lib/composer/vendor/consolidation/robo/src/Log/ResultPrinter.php @@ -2,13 +2,12 @@ namespace Robo\Log; use Robo\Result; -use Robo\TaskInfo; use Robo\Contract\PrintedInterface; use Robo\Contract\ProgressIndicatorAwareInterface; +use Robo\Contract\VerbosityThresholdInterface; use Robo\Common\ProgressIndicatorAwareTrait; use Psr\Log\LogLevel; -use Psr\Log\LoggerInterface; use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerAwareTrait; use Consolidation\Log\ConsoleLogLevel; @@ -32,6 +31,10 @@ class ResultPrinter implements LoggerAwareInterface, ProgressIndicatorAwareInter */ public function printResult(Result $result) { + $task = $result->getTask(); + if ($task instanceof VerbosityThresholdInterface && !$task->verbosityMeetsThreshold()) { + return; + } if (!$result->wasSuccessful()) { return $this->printError($result); } else { diff --git a/lib/composer/vendor/consolidation/robo/src/Log/RoboLogStyle.php b/lib/composer/vendor/consolidation/robo/src/Log/RoboLogStyle.php index c66e6fcb..e4999a87 100644 --- a/lib/composer/vendor/consolidation/robo/src/Log/RoboLogStyle.php +++ b/lib/composer/vendor/consolidation/robo/src/Log/RoboLogStyle.php @@ -3,8 +3,6 @@ namespace Robo\Log; use Robo\Common\TimeKeeper; use Consolidation\Log\LogOutputStyler; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Style\OutputStyle; /** * Robo Log Styler. diff --git a/lib/composer/vendor/consolidation/robo/src/Log/RoboLogger.php b/lib/composer/vendor/consolidation/robo/src/Log/RoboLogger.php index c3e223fd..75cf23f7 100644 --- a/lib/composer/vendor/consolidation/robo/src/Log/RoboLogger.php +++ b/lib/composer/vendor/consolidation/robo/src/Log/RoboLogger.php @@ -1,17 +1,10 @@ getMessage(), $result->getData()); + } + if ($result instanceof ResultData) { + return new Result($task, $result->getExitCode(), $result->getMessage(), $result->getData()); + } + if (is_array($result)) { + return static::success($task, '', $result); + } + throw new \Exception(sprintf('Task %s returned a %s instead of a \Robo\Result.', get_class($task), get_class($result))); + } + protected function printResult() { // For historic reasons, the Result constructor is responsible @@ -45,7 +69,7 @@ class Result extends ResultData $resultPrinter = Robo::resultPrinter(); if ($resultPrinter) { if ($resultPrinter->printResult($this)) { - $this->data['already-printed'] = true; + $this->alreadyPrinted(); } } } diff --git a/lib/composer/vendor/consolidation/robo/src/ResultData.php b/lib/composer/vendor/consolidation/robo/src/ResultData.php index be7b5c63..90baf6e9 100644 --- a/lib/composer/vendor/consolidation/robo/src/ResultData.php +++ b/lib/composer/vendor/consolidation/robo/src/ResultData.php @@ -1,22 +1,17 @@ exitCode = $exitCode; - $this->message = $message; - - parent::__construct($data); + parent::__construct($message, $data); } /** @@ -65,14 +58,6 @@ class ResultData extends \ArrayObject implements ExitCodeInterface, OutputDataIn return new ResultData(self::EXITCODE_USER_CANCEL, $message, $data); } - /** - * @return array - */ - public function getData() - { - return $this->getArrayCopy(); - } - /** * @return int */ @@ -86,17 +71,25 @@ class ResultData extends \ArrayObject implements ExitCodeInterface, OutputDataIn */ public function getOutputData() { - if (!empty($this->message) && !isset($this['already-printed'])) { + if (!empty($this->message) && !isset($this['already-printed']) && isset($this['provide-outputdata'])) { return $this->message; } } /** - * @return string + * Indicate that the message in this data has already been displayed. */ - public function getMessage() + public function alreadyPrinted() { - return $this->message; + $this['already-printed'] = true; + } + + /** + * Opt-in to providing the result message as the output data + */ + public function provideOutputdata() + { + $this['provide-outputdata'] = true; } /** @@ -114,39 +107,4 @@ class ResultData extends \ArrayObject implements ExitCodeInterface, OutputDataIn { return $this->exitCode == self::EXITCODE_USER_CANCEL; } - - /** - * Merge another result into this result. Data already - * existing in this result takes precedence over the - * data in the Result being merged. - * - * @param \Robo\ResultData $result - * - * @return $this - */ - public function merge(ResultData $result) - { - $mergedData = $this->getArrayCopy() + $result->getArrayCopy(); - $this->exchangeArray($mergedData); - return $this; - } - - /** - * @return bool - */ - public function hasExecutionTime() - { - return isset($this['time']); - } - - /** - * @return null|float - */ - public function getExecutionTime() - { - if (!$this->hasExecutionTime()) { - return null; - } - return $this['time']; - } } diff --git a/lib/composer/vendor/consolidation/robo/src/Robo.php b/lib/composer/vendor/consolidation/robo/src/Robo.php index 7c350db7..0f427707 100644 --- a/lib/composer/vendor/consolidation/robo/src/Robo.php +++ b/lib/composer/vendor/consolidation/robo/src/Robo.php @@ -3,8 +3,13 @@ namespace Robo; use League\Container\Container; use League\Container\ContainerInterface; +use Robo\Common\ProcessExecutor; +use Consolidation\Config\ConfigInterface; +use Consolidation\Config\Loader\ConfigProcessor; +use Consolidation\Config\Loader\YamlConfigLoader; use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Application as SymfonyApplication; +use Symfony\Component\Process\Process; /** * Manages the container reference and other static data. Favor @@ -14,7 +19,7 @@ use Symfony\Component\Console\Application as SymfonyApplication; class Robo { const APPLICATION_NAME = 'Robo'; - const VERSION = '1.0.4'; + const VERSION = '1.2.1'; /** * The currently active container object, or NULL if not initialized yet. @@ -34,9 +39,10 @@ class Robo * * @return int */ - public static function run($argv, $commandClasses, $appName = null, $appVersion = null, $output = null) + public static function run($argv, $commandClasses, $appName = null, $appVersion = null, $output = null, $repository = null) { $runner = new \Robo\Runner($commandClasses); + $runner->setSelfUpdateRepository($repository); $statusCode = $runner->execute($argv, $appName, $appVersion, $output); return $statusCode; } @@ -85,6 +91,33 @@ class Robo return static::$container !== null; } + /** + * Create a config object and load it from the provided paths. + */ + public static function createConfiguration($paths) + { + $config = new \Robo\Config\Config(); + static::loadConfiguration($paths, $config); + return $config; + } + + /** + * Use a simple config loader to load configuration values from specified paths + */ + public static function loadConfiguration($paths, $config = null) + { + if ($config == null) { + $config = static::config(); + } + $loader = new YamlConfigLoader(); + $processor = new ConfigProcessor(); + $processor->add($config->export()); + foreach ($paths as $path) { + $processor->extend($loader->load($path)); + } + $config->import($processor->export()); + } + /** * Create a container and initiailze it. If you wish to *change* * anything defined in the container, then you should call @@ -93,7 +126,7 @@ class Robo * @param null|\Symfony\Component\Console\Input\InputInterface $input * @param null|\Symfony\Component\Console\Output\OutputInterface $output * @param null|\Robo\Application $app - * @param null|\Robo\Config $config + * @param null|ConfigInterface $config * * @return \League\Container\Container|\League\Container\ContainerInterface */ @@ -109,7 +142,7 @@ class Robo } if (!$config) { - $config = new Config(); + $config = new \Robo\Config\Config(); } // Set up our dependency injection container. @@ -139,11 +172,11 @@ class Robo * * @param \League\Container\ContainerInterface $container * @param \Symfony\Component\Console\Application $app - * @param \Robo\Config $config + * @param ConfigInterface $config * @param null|\Symfony\Component\Console\Input\InputInterface $input * @param null|\Symfony\Component\Console\Output\OutputInterface $output */ - public static function configureContainer(ContainerInterface $container, SymfonyApplication $app, Config $config, $input = null, $output = null) + public static function configureContainer(ContainerInterface $container, SymfonyApplication $app, ConfigInterface $config, $input = null, $output = null) { // Self-referential container refernce for the inflector $container->add('container', $container); @@ -156,12 +189,14 @@ class Robo if (!$output) { $output = new \Symfony\Component\Console\Output\ConsoleOutput(); } - $config->setDecorated($output->isDecorated()); + $config->set(Config::DECORATED, $output->isDecorated()); + $config->set(Config::INTERACTIVE, $input->isInteractive()); $container->share('application', $app); $container->share('config', $config); $container->share('input', $input); $container->share('output', $output); + $container->share('outputAdapter', \Robo\Common\OutputAdapter::class); // Register logging and related services. $container->share('logStyler', \Robo\Log\RoboLogStyle::class); @@ -175,22 +210,30 @@ class Robo ->withArgument('output'); $container->share('resultPrinter', \Robo\Log\ResultPrinter::class); $container->add('simulator', \Robo\Task\Simulator::class); - $container->share('globalOptionsEventListener', \Robo\GlobalOptionsEventListener::class); + $container->share('globalOptionsEventListener', \Robo\GlobalOptionsEventListener::class) + ->withMethodCall('setApplication', ['application']); + $container->share('injectConfigEventListener', \Consolidation\Config\Inject\ConfigForCommand::class) + ->withArgument('config') + ->withMethodCall('setApplication', ['application']); $container->share('collectionProcessHook', \Robo\Collection\CollectionProcessHook::class); - $container->share('hookManager', \Consolidation\AnnotatedCommand\Hooks\HookManager::class) - ->withMethodCall('addResultProcessor', ['collectionProcessHook', '*']); $container->share('alterOptionsCommandEvent', \Consolidation\AnnotatedCommand\Options\AlterOptionsCommandEvent::class) ->withArgument('application'); + $container->share('hookManager', \Consolidation\AnnotatedCommand\Hooks\HookManager::class) + ->withMethodCall('addCommandEvent', ['alterOptionsCommandEvent']) + ->withMethodCall('addCommandEvent', ['injectConfigEventListener']) + ->withMethodCall('addCommandEvent', ['globalOptionsEventListener']) + ->withMethodCall('addResultProcessor', ['collectionProcessHook', '*']); $container->share('eventDispatcher', \Symfony\Component\EventDispatcher\EventDispatcher::class) - ->withMethodCall('addSubscriber', ['globalOptionsEventListener']) - ->withMethodCall('addSubscriber', ['alterOptionsCommandEvent']) ->withMethodCall('addSubscriber', ['hookManager']); $container->share('formatterManager', \Consolidation\OutputFormatters\FormatterManager::class) ->withMethodCall('addDefaultFormatters', []) ->withMethodCall('addDefaultSimplifiers', []); + $container->share('prepareTerminalWidthOption', \Consolidation\AnnotatedCommand\Options\PrepareTerminalWidthOption::class) + ->withMethodCall('setApplication', ['application']); $container->share('commandProcessor', \Consolidation\AnnotatedCommand\CommandProcessor::class) ->withArgument('hookManager') ->withMethodCall('setFormatterManager', ['formatterManager']) + ->withMethodCall('addPrepareFormatter', ['prepareTerminalWidthOption']) ->withMethodCall( 'setDisplayErrorFunction', [ @@ -202,8 +245,13 @@ class Robo ); $container->share('commandFactory', \Consolidation\AnnotatedCommand\AnnotatedCommandFactory::class) ->withMethodCall('setCommandProcessor', ['commandProcessor']); + + // Deprecated: favor using collection builders to direct use of collections. $container->add('collection', \Robo\Collection\Collection::class); + // Deprecated: use CollectionBuilder::create() instead -- or, better + // yet, BuilderAwareInterface::collectionBuilder() if available. $container->add('collectionBuilder', \Robo\Collection\CollectionBuilder::class); + static::addInflectors($container); // Make sure the application is appropriately initialized. @@ -246,6 +294,10 @@ class Robo ->invokeMethod('setOutput', ['output']); $container->inflector(\Robo\Contract\ProgressIndicatorAwareInterface::class) ->invokeMethod('setProgressIndicator', ['progressIndicator']); + $container->inflector(\Consolidation\AnnotatedCommand\Events\CustomEventAwareInterface::class) + ->invokeMethod('setHookManager', ['hookManager']); + $container->inflector(\Robo\Contract\VerbosityThresholdInterface::class) + ->invokeMethod('setOutputAdapter', ['outputAdapter']); } /** @@ -292,7 +344,7 @@ class Robo } /** - * @return \Robo\Config + * @return ConfigInterface */ public static function config() { @@ -334,4 +386,9 @@ class Robo { return static::service('input'); } + + public static function process(Process $process) + { + return ProcessExecutor::create(static::getContainer(), $process); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Runner.php b/lib/composer/vendor/consolidation/robo/src/Runner.php index 06218ec1..800ad281 100644 --- a/lib/composer/vendor/consolidation/robo/src/Runner.php +++ b/lib/composer/vendor/consolidation/robo/src/Runner.php @@ -1,15 +1,12 @@ dir = getcwd(); } + protected function errorCondtion($msg, $errorType) + { + $this->errorConditions[$msg] = $errorType; + } + /** * @param \Symfony\Component\Console\Output\OutputInterface $output * @@ -70,7 +82,7 @@ class Runner implements ContainerAwareInterface return true; } if (!file_exists($this->dir)) { - $output->writeln("Path `{$this->dir}` is invalid; please provide a valid absolute path to the Robofile to load."); + $this->errorCondtion("Path `{$this->dir}` is invalid; please provide a valid absolute path to the Robofile to load.", 'red'); return false; } @@ -79,13 +91,13 @@ class Runner implements ContainerAwareInterface $roboFilePath = $realDir . DIRECTORY_SEPARATOR . $this->roboFile; if (!file_exists($roboFilePath)) { $requestedRoboFilePath = $this->dir . DIRECTORY_SEPARATOR . $this->roboFile; - $output->writeln("Requested RoboFile `$requestedRoboFilePath` is invalid, please provide valid absolute path to load Robofile"); + $this->errorCondtion("Requested RoboFile `$requestedRoboFilePath` is invalid, please provide valid absolute path to load Robofile.", 'red'); return false; } require_once $roboFilePath; if (!class_exists($this->roboClass)) { - $output->writeln("Class ".$this->roboClass." was not loaded"); + $this->errorCondtion("Class {$this->roboClass} was not loaded.", 'red'); return false; } return true; @@ -136,7 +148,10 @@ class Runner implements ContainerAwareInterface // If we were not provided a container, then create one if (!$this->getContainer()) { - $container = Robo::createDefaultContainer($input, $output, $app); + $userConfig = 'robo.yml'; + $roboAppConfig = dirname(__DIR__) . '/robo.yml'; + $config = Robo::createConfiguration([$userConfig, $roboAppConfig]); + $container = Robo::createDefaultContainer($input, $output, $app, $config); $this->setContainer($container); // Automatically register a shutdown function and // an error handler when we provide the container. @@ -146,10 +161,13 @@ class Runner implements ContainerAwareInterface if (!$app) { $app = Robo::application(); } - if (!isset($commandFiles)) { - $this->yell("Robo is not initialized here. Please run `robo init` to create a new RoboFile", 40, 'yellow'); - $app->addInitRoboFileCommand($this->roboFile, $this->roboClass); - $commandFiles = []; + if ($app instanceof \Robo\Application) { + $app->addSelfUpdateCommand($this->getSelfUpdateRepository()); + if (!isset($commandFiles)) { + $this->errorCondtion("Robo is not initialized here. Please run `robo init` to create a new RoboFile.", 'yellow'); + $app->addInitRoboFileCommand($this->roboFile, $this->roboClass); + $commandFiles = []; + } } $this->registerCommandClasses($app, $commandFiles); @@ -158,6 +176,15 @@ class Runner implements ContainerAwareInterface } catch (TaskExitException $e) { $statusCode = $e->getCode() ?: 1; } + + // If there were any error conditions in bootstrapping Robo, + // print them only if the requested command did not complete + // successfully. + if ($statusCode) { + foreach ($this->errorConditions as $msg => $color) { + $this->yell($msg, 40, $color); + } + } return $statusCode; } @@ -222,6 +249,9 @@ class Runner implements ContainerAwareInterface // If the command class is already an instantiated object, then // just use it exactly as it was provided to us. if (is_string($commandClass)) { + if (!class_exists($commandClass)) { + return; + } $reflectionClass = new \ReflectionClass($commandClass); if ($reflectionClass->isAbstract()) { return; @@ -235,7 +265,7 @@ class Runner implements ContainerAwareInterface // ensure that it has a builder. Every command class needs // its own collection builder, as they have references to each other. if ($commandClass instanceof BuilderAwareInterface) { - $builder = $container->get('collectionBuilder', [$commandClass]); + $builder = CollectionBuilder::create($container, $commandClass); $commandClass->setBuilder($builder); } if ($commandClass instanceof ContainerAwareInterface) { @@ -416,4 +446,20 @@ class Runner implements ContainerAwareInterface } return false; } + + /** + * @return string + */ + public function getSelfUpdateRepository() + { + return $this->selfUpdateRepository; + } + + /** + * @param string $selfUpdateRepository + */ + public function setSelfUpdateRepository($selfUpdateRepository) + { + $this->selfUpdateRepository = $selfUpdateRepository; + } } diff --git a/lib/composer/vendor/consolidation/robo/src/SelfUpdateCommand.php b/lib/composer/vendor/consolidation/robo/src/SelfUpdateCommand.php new file mode 100644 index 00000000..d07ee71f --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/SelfUpdateCommand.php @@ -0,0 +1,152 @@ + + */ +class SelfUpdateCommand extends Command +{ + const SELF_UPDATE_COMMAND_NAME = 'self:update'; + + protected $gitHubRepository; + + protected $currentVersion; + + protected $applicationName; + + public function __construct($applicationName = null, $currentVersion = null, $gitHubRepository = null) + { + parent::__construct(self::SELF_UPDATE_COMMAND_NAME); + + $this->applicationName = $applicationName; + $this->currentVersion = $currentVersion; + $this->gitHubRepository = $gitHubRepository; + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->setAliases(array('update')) + ->setDescription('Updates the robo.phar to the latest version.') + ->setHelp( + <<self-update command checks github for newer +versions of robo and if found, installs the latest. +EOT + ); + } + + protected function getLatestReleaseFromGithub() + { + $opts = [ + 'http' => [ + 'method' => 'GET', + 'header' => [ + 'User-Agent: ' . $this->applicationName . ' (' . $this->gitHubRepository . ')' . ' Self-Update (PHP)' + ] + ] + ]; + + $context = stream_context_create($opts); + + $releases = file_get_contents('https://api.github.com/repos/' . $this->gitHubRepository . '/releases', false, $context); + $releases = json_decode($releases); + + if (! isset($releases[0])) { + throw new \Exception('API error - no release found at GitHub repository ' . $this->gitHubRepository); + } + + $version = $releases[0]->tag_name; + $url = $releases[0]->assets[0]->browser_download_url; + + return [ $version, $url ]; + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + if (empty(\Phar::running())) { + throw new \Exception(self::SELF_UPDATE_COMMAND_NAME . ' only works when running the phar version of ' . $this->applicationName . '.'); + } + + $localFilename = realpath($_SERVER['argv'][0]) ?: $_SERVER['argv'][0]; + $programName = basename($localFilename); + $tempFilename = dirname($localFilename) . '/' . basename($localFilename, '.phar') . '-temp.phar'; + + // check for permissions in local filesystem before start connection process + if (! is_writable($tempDirectory = dirname($tempFilename))) { + throw new \Exception( + $programName . ' update failed: the "' . $tempDirectory . + '" directory used to download the temp file could not be written' + ); + } + + if (! is_writable($localFilename)) { + throw new \Exception( + $programName . ' update failed: the "' . $localFilename . '" file could not be written (execute with sudo)' + ); + } + + list( $latest, $downloadUrl ) = $this->getLatestReleaseFromGithub(); + + + if ($this->currentVersion == $latest) { + $output->writeln('No update available'); + return; + } + + $fs = new sfFilesystem(); + + $output->writeln('Downloading ' . $this->applicationName . ' (' . $this->gitHubRepository . ') ' . $latest); + + $fs->copy($downloadUrl, $tempFilename); + + $output->writeln('Download finished'); + + try { + \error_reporting(E_ALL); // supress notices + + @chmod($tempFilename, 0777 & ~umask()); + // test the phar validity + $phar = new \Phar($tempFilename); + // free the variable to unlock the file + unset($phar); + @rename($tempFilename, $localFilename); + $output->writeln('Successfully updated ' . $programName . ''); + $this->_exit(); + } catch (\Exception $e) { + @unlink($tempFilename); + if (! $e instanceof \UnexpectedValueException && ! $e instanceof \PharException) { + throw $e; + } + $output->writeln('The download is corrupted (' . $e->getMessage() . ').'); + $output->writeln('Please re-run the self-update command to try again.'); + } + } + + /** + * Stop execution + * + * This is a workaround to prevent warning of dispatcher after replacing + * the phar file. + * + * @return void + */ + protected function _exit() + { + exit; + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/State/Consumer.php b/lib/composer/vendor/consolidation/robo/src/State/Consumer.php new file mode 100644 index 00000000..ab9c0e27 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/State/Consumer.php @@ -0,0 +1,12 @@ +message = $message; + parent::__construct($data); + } + + /** + * @return array + */ + public function getData() + { + return $this->getArrayCopy(); + } + + /** + * @return string + */ + public function getMessage() + { + return $this->message; + } + + /** + * @param string message + */ + public function setMessage($message) + { + $this->message = $message; + } + + /** + * Merge another result into this result. Data already + * existing in this result takes precedence over the + * data in the Result being merged. + * + * @param \Robo\ResultData $result + * + * @return $this + */ + public function merge(Data $result) + { + $mergedData = $this->getArrayCopy() + $result->getArrayCopy(); + $this->exchangeArray($mergedData); + return $this; + } + + /** + * Update the current data with the data provided in the parameter. + * Provided data takes precedence. + * + * @param \ArrayObject $update + * + * @return $this + */ + public function update(\ArrayObject $update) + { + $iterator = $update->getIterator(); + + while ($iterator->valid()) { + $this[$iterator->key()] = $iterator->current(); + $iterator->next(); + } + + return $this; + } + + /** + * Merge another result into this result. Data already + * existing in this result takes precedence over the + * data in the Result being merged. + * + * $data['message'] is handled specially, and is appended + * to $this->message if set. + * + * @param array $data + * + * @return array + */ + public function mergeData(array $data) + { + $mergedData = $this->getArrayCopy() + $data; + $this->exchangeArray($mergedData); + return $mergedData; + } + + /** + * @return bool + */ + public function hasExecutionTime() + { + return isset($this['time']); + } + + /** + * @return null|float + */ + public function getExecutionTime() + { + if (!$this->hasExecutionTime()) { + return null; + } + return $this['time']; + } + + /** + * Accumulate execution time + */ + public function accumulateExecutionTime($duration) + { + // Convert data arrays to scalar + if (is_array($duration)) { + $duration = isset($duration['time']) ? $duration['time'] : 0; + } + $this['time'] = $this->getExecutionTime() + $duration; + return $this->getExecutionTime(); + } + + /** + * Accumulate the message. + */ + public function accumulateMessage($message) + { + if (!empty($this->message)) { + $this->message .= "\n"; + } + $this->message .= $message; + return $this->getMessage(); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/State/StateAwareInterface.php b/lib/composer/vendor/consolidation/robo/src/State/StateAwareInterface.php new file mode 100644 index 00000000..f86bccb8 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/State/StateAwareInterface.php @@ -0,0 +1,30 @@ +state; + } + + /** + * {@inheritdoc} + */ + public function setState(Data $state) + { + $this->state = $state; + } + + /** + * {@inheritdoc} + */ + public function setStateValue($key, $value) + { + $this->state[$key] = $value; + } + + /** + * {@inheritdoc} + */ + public function updateState(Data $update) + { + $this->state->update($update); + } + + /** + * {@inheritdoc} + */ + public function resetState() + { + $this->state = new Data(); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php b/lib/composer/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php index 0d1b35a0..11ff764c 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php @@ -12,7 +12,8 @@ use Traversable; * ``` php * taskApiGen('./apigen.neon') + * $this->taskApiGen('./vendor/apigen/apigen.phar') + * ->config('./apigen.neon') * ->templateConfig('vendor/apigen/apigen/templates/bootstrap/config.neon') * ->wipeout(true) * ->run(); @@ -30,6 +31,7 @@ class ApiGen extends BaseTask implements CommandInterface * @var string */ protected $command; + protected $operation = 'generate'; /** * @param null|string $pathToApiGen @@ -39,6 +41,15 @@ class ApiGen extends BaseTask implements CommandInterface public function __construct($pathToApiGen = null) { $this->command = $pathToApiGen; + $command_parts = []; + preg_match('/((?:.+)?apigen(?:\.phar)?) ?( \w+)? ?(.+)?/', $this->command, $command_parts); + if (count($command_parts) === 3) { + list(, $this->command, $this->operation) = $command_parts; + } + if (count($command_parts) === 4) { + list(, $this->command, $this->operation, $arg) = $command_parts; + $this->arg($arg); + } if (!$this->command) { $this->command = $this->findExecutablePhar('apigen'); } @@ -47,6 +58,31 @@ class ApiGen extends BaseTask implements CommandInterface } } + /** + * Pass methods parameters as arguments to executable. Argument values + * are automatically escaped. + * + * @param string|string[] $args + * + * @return $this + */ + public function args($args) + { + if (!is_array($args)) { + $args = func_get_args(); + } + $args = array_map(function ($arg) { + if (preg_match('/^\w+$/', trim($arg)) === 1) { + $this->operation = $arg; + return null; + } + return $arg; + }, $args); + $args = array_filter($args); + $this->arguments .= ' ' . implode(' ', array_map('static::escape', $args)); + return $this; + } + /** * @param array|Traversable|string $arg a single object or something traversable * @@ -468,7 +504,7 @@ class ApiGen extends BaseTask implements CommandInterface */ public function getCommand() { - return $this->command . $this->arguments; + return "$this->command $this->operation$this->arguments"; } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Archive/Extract.php b/lib/composer/vendor/consolidation/robo/src/Task/Archive/Extract.php index add5397f..a00a0baf 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Archive/Extract.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Archive/Extract.php @@ -31,8 +31,6 @@ use Robo\Common\BuilderAwareTrait; * ->run(); * ?> * ``` - * - * @method to(string) location to store extracted files */ class Extract extends BaseTask implements BuilderAwareInterface { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/Exec.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/Exec.php index 5baccedd..c3e47917 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/Exec.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/Exec.php @@ -1,6 +1,7 @@ command . $this->arguments); + $this->stop(); } /** @@ -87,116 +63,26 @@ class Exec extends BaseTask implements CommandInterface, PrintedInterface, Simul * * @return $this */ - public function background() + public function background($arg = true) { self::$instances[] = $this; - $this->background = true; + $this->background = $arg; return $this; } - /** - * Stop command if it runs longer then $timeout in seconds - * - * @param int $timeout - * - * @return $this - */ - public function timeout($timeout) - { - $this->timeout = $timeout; - return $this; - } - - /** - * Stops command if it does not output something for a while - * - * @param int $timeout - * - * @return $this - */ - public function idleTimeout($timeout) - { - $this->idleTimeout = $timeout; - return $this; - } - - /** - * Sets the environment variables for the command - * - * @param array $env - * - * @return $this - */ - public function env(array $env) - { - $this->env = $env; - return $this; - } - - public function __destruct() - { - $this->stop(); - } - - protected function stop() - { - if ($this->background && $this->process->isRunning()) { - $this->process->stop(); - $this->printTaskInfo("Stopped {command}", ['command' => $this->getCommand()]); - } - } - - /** - * @param array $context - */ - protected function printAction($context = []) - { - $command = $this->getCommand(); - $dir = $this->workingDirectory ? " in {dir}" : ""; - $this->printTaskInfo("Running {command}$dir", ['command' => $command, 'dir' => $this->workingDirectory] + $context); - } - /** * {@inheritdoc} */ - public function run() + protected function getCommandDescription() { - $this->printAction(); - $this->process = new Process($this->getCommand()); - $this->process->setTimeout($this->timeout); - $this->process->setIdleTimeout($this->idleTimeout); - $this->process->setWorkingDirectory($this->workingDirectory); - - if (isset($this->env)) { - $this->process->setEnv($this->env); - } - - if (!$this->background and !$this->isPrinted) { - $this->startTimer(); - $this->process->run(); - $this->stopTimer(); - return new Result($this, $this->process->getExitCode(), $this->process->getOutput(), ['time' => $this->getExecutionTime()]); - } - - if (!$this->background and $this->isPrinted) { - $this->startTimer(); - $this->process->run( - function ($type, $buffer) { - $progressWasVisible = $this->hideTaskProgress(); - print($buffer); - $this->showTaskProgress($progressWasVisible); - } - ); - $this->stopTimer(); - return new Result($this, $this->process->getExitCode(), $this->process->getOutput(), ['time' => $this->getExecutionTime()]); - } - - try { - $this->process->start(); - } catch (\Exception $e) { - return Result::fromException($this, $e); - } - return Result::success($this); + return $this->getCommand(); + } + /** + * {@inheritdoc} + */ + public function getCommand() + { + return trim($this->command . $this->arguments); } /** @@ -215,6 +101,21 @@ class Exec extends BaseTask implements CommandInterface, PrintedInterface, Simul } } } + + /** + * {@inheritdoc} + */ + public function run() + { + // TODO: Symfony 4 requires that we supply the working directory. + $result_data = $this->execute(new Process($this->getCommand(), getcwd())); + return new Result( + $this, + $result_data->getExitCode(), + $result_data->getMessage(), + $result_data->getData() + ); + } } if (function_exists('pcntl_signal')) { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/ExecStack.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/ExecStack.php index b5855dee..51b39ef1 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/ExecStack.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/ExecStack.php @@ -2,7 +2,6 @@ namespace Robo\Task\Base; use Robo\Task\CommandStack; -use Robo\Task\Base; /** * Execute commands one by one in stack. @@ -18,8 +17,6 @@ use Robo\Task\Base; * * ?> * ``` - * - * @method $this stopOnFail() */ class ExecStack extends CommandStack { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/ParallelExec.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/ParallelExec.php index 2cd1ebc6..c98b7841 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/ParallelExec.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/ParallelExec.php @@ -1,8 +1,6 @@ run(); * ?> * ``` - * - * - * @method \Robo\Task\Base\ParallelExec timeout(int $timeout) stops process if it runs longer then `$timeout` (seconds) - * @method \Robo\Task\Base\ParallelExec idleTimeout(int $timeout) stops process if it does not output for time longer then `$timeout` (seconds) */ class ParallelExec extends BaseTask implements CommandInterface, PrintedInterface { @@ -46,6 +40,11 @@ class ParallelExec extends BaseTask implements CommandInterface, PrintedInterfac */ protected $idleTimeout = null; + /** + * @var null|int + */ + protected $waitInterval = 0; + /** * @var bool */ @@ -77,11 +76,14 @@ class ParallelExec extends BaseTask implements CommandInterface, PrintedInterfac */ public function process($command) { - $this->processes[] = new Process($this->receiveCommand($command)); + // TODO: Symfony 4 requires that we supply the working directory. + $this->processes[] = new Process($this->receiveCommand($command), getcwd()); return $this; } /** + * Stops process if it runs longer then `$timeout` (seconds). + * * @param int $timeout * * @return $this @@ -93,6 +95,8 @@ class ParallelExec extends BaseTask implements CommandInterface, PrintedInterfac } /** + * Stops process if it does not output for time longer then `$timeout` (seconds). + * * @param int $idleTimeout * * @return $this @@ -103,6 +107,20 @@ class ParallelExec extends BaseTask implements CommandInterface, PrintedInterfac return $this; } + /** + * Parallel processing will wait `$waitInterval` seconds after launching each process and before + * the next one. + * + * @param int $waitInterval + * + * @return $this + */ + public function waitInterval($waitInterval) + { + $this->waitInterval = $waitInterval; + return $this; + } + /** * {@inheritdoc} */ @@ -124,16 +142,20 @@ class ParallelExec extends BaseTask implements CommandInterface, PrintedInterfac */ public function run() { - foreach ($this->processes as $process) { - $process->setIdleTimeout($this->idleTimeout); - $process->setTimeout($this->timeout); - $process->start(); - $this->printTaskInfo($process->getCommandLine()); - } - $this->startProgressIndicator(); - $running = $this->processes; + $running = []; + $queue = $this->processes; + $nextTime = time(); while (true) { + if (($nextTime <= time()) && !empty($queue)) { + $process = array_shift($queue); + $process->setIdleTimeout($this->idleTimeout); + $process->setTimeout($this->timeout); + $process->start(); + $this->printTaskInfo($process->getCommandLine()); + $running[] = $process; + $nextTime = time() + $this->waitInterval; + } foreach ($running as $k => $process) { try { $process->checkTimeout(); @@ -152,7 +174,7 @@ class ParallelExec extends BaseTask implements CommandInterface, PrintedInterfac unset($running[$k]); } } - if (empty($running)) { + if (empty($running) && empty($queue)) { break; } usleep(1000); diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php index 51c81d6d..708ea845 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php @@ -6,7 +6,6 @@ use Robo\Result; use Robo\Task\BaseTask; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\ArrayInput; -use Symfony\Component\Console\Input\InputInterface; /** * Executes Symfony Command diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/loadTasks.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/loadTasks.php index 530fbcd5..ab5301bb 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/loadTasks.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/loadTasks.php @@ -13,6 +13,9 @@ trait loadTasks return $this->task(Exec::class, $command); } + /** + * @return ExecStack + */ protected function taskExecStack() { return $this->task(ExecStack::class); diff --git a/lib/composer/vendor/consolidation/robo/src/Task/BaseTask.php b/lib/composer/vendor/consolidation/robo/src/Task/BaseTask.php index 36c9fa8c..66155c09 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/BaseTask.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/BaseTask.php @@ -7,16 +7,38 @@ use Robo\Contract\InflectionInterface; use Robo\Common\TaskIO; use Robo\Contract\TaskInterface; use Robo\Contract\ProgressIndicatorAwareInterface; +use Robo\Contract\VerbosityThresholdInterface; use Robo\Common\ProgressIndicatorAwareTrait; use Robo\Contract\ConfigAwareInterface; use Psr\Log\LoggerAwareInterface; +use Robo\Contract\OutputAwareInterface; -abstract class BaseTask implements TaskInterface, LoggerAwareInterface, ConfigAwareInterface, ProgressIndicatorAwareInterface, InflectionInterface +abstract class BaseTask implements TaskInterface, LoggerAwareInterface, VerbosityThresholdInterface, ConfigAwareInterface, ProgressIndicatorAwareInterface, InflectionInterface { - use TaskIO; // uses LoggerAwareTrait and ConfigAwareTrait + use TaskIO; // uses LoggerAwareTrait, VerbosityThresholdTrait and ConfigAwareTrait use ProgressIndicatorAwareTrait; use InflectionTrait; + /** + * ConfigAwareInterface uses this to decide where configuration + * items come from. Default is this prefix + class name + key, + * e.g. `task.Remote.Ssh.remoteDir`. + */ + protected static function configPrefix() + { + return 'task.'; + } + + /** + * ConfigAwareInterface uses this to decide where configuration + * items come from. Default is this prefix + class name + key, + * e.g. `task.Ssh.remoteDir`. + */ + protected static function configPostfix() + { + return '.settings'; + } + /** * {@inheritdoc} */ @@ -31,5 +53,8 @@ abstract class BaseTask implements TaskInterface, LoggerAwareInterface, ConfigAw if ($child instanceof ConfigAwareInterface && $this->getConfig()) { $child->setConfig($this->getConfig()); } + if ($child instanceof VerbosityThresholdInterface && $this->outputAdapter()) { + $child->setOutputAdapter($this->outputAdapter()); + } } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Bower/Install.php b/lib/composer/vendor/consolidation/robo/src/Task/Bower/Install.php index d7fb57dd..c3c0ce75 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Bower/Install.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Bower/Install.php @@ -1,7 +1,6 @@ executable . ' ' . $this->stripExecutableFromCommand($command); - array_push($this->exec, trim($command)); + $command = $this->executable . ' ' . $this->stripExecutableFromCommand($command); + $this->exec[] = trim($command); return $this; } @@ -105,19 +104,31 @@ abstract class CommandStack extends BaseTask implements CommandInterface, Printe if (empty($this->exec)) { throw new TaskException($this, 'You must add at least one command'); } - if (!$this->stopOnFail) { + // If 'stopOnFail' is not set, or if there is only one command to run, + // then execute the single command to run. + if (!$this->stopOnFail || (count($this->exec) == 1)) { $this->printTaskInfo('{command}', ['command' => $this->getCommand()]); return $this->executeCommand($this->getCommand()); } + // When executing multiple commands in 'stopOnFail' mode, run them + // one at a time so that the result will have the exact command + // that failed available to the caller. This is at the expense of + // losing the output from all successful commands. + $data = []; + $message = ''; + $result = null; foreach ($this->exec as $command) { $this->printTaskInfo("Executing {command}", ['command' => $command]); $result = $this->executeCommand($command); + $result->accumulateExecutionTime($data); + $message = $result->accumulateMessage($message); + $data = $result->mergeData($data); if (!$result->wasSuccessful()) { return $result; } } - return Result::success($this); + return $result; } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Base.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Base.php index 4f6597b7..de3fe217 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Base.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Base.php @@ -1,11 +1,11 @@ prefer = '--prefer-dist'; - return $this; - } - - /** - * adds `prefer-source` option to composer - * - * @return $this - */ - public function preferSource() - { - $this->prefer = '--prefer-source'; - return $this; - } - - /** - * adds `no-dev` option to composer - * - * @return $this - */ - public function noDev() - { - $this->dev = '--no-dev'; - return $this; - } - - /** - * adds `no-ansi` option to composer - * - * @return $this - */ - public function noAnsi() - { - $this->ansi = '--no-ansi'; - return $this; - } - - /** - * adds `ansi` option to composer - * - * @return $this - */ - public function ansi() - { - $this->ansi = '--ansi'; - return $this; - } - - /** - * adds `optimize-autoloader` option to composer - * - * @return $this - */ - public function optimizeAutoloader() - { - $this->optimizeAutoloader = '--optimize-autoloader'; - return $this; - } - /** * @param null|string $pathToComposer * @@ -128,18 +62,187 @@ abstract class Base extends BaseTask } } + /** + * adds `prefer-dist` option to composer + * + * @return $this + */ + public function preferDist($preferDist = true) + { + if (!$preferDist) { + return $this->preferSource(); + } + $this->prefer = '--prefer-dist'; + return $this; + } + + /** + * adds `prefer-source` option to composer + * + * @return $this + */ + public function preferSource() + { + $this->prefer = '--prefer-source'; + return $this; + } + + /** + * adds `dev` option to composer + * + * @return $this + */ + public function dev($dev = true) + { + if (!$dev) { + return $this->noDev(); + } + $this->dev = '--dev'; + return $this; + } + + /** + * adds `no-dev` option to composer + * + * @return $this + */ + public function noDev() + { + $this->dev = '--no-dev'; + return $this; + } + + /** + * adds `ansi` option to composer + * + * @return $this + */ + public function ansi($ansi = true) + { + if (!$ansi) { + return $this->noAnsi(); + } + $this->ansi = '--ansi'; + return $this; + } + + /** + * adds `no-ansi` option to composer + * + * @return $this + */ + public function noAnsi() + { + $this->ansi = '--no-ansi'; + return $this; + } + + public function interaction($interaction = true) + { + if (!$interaction) { + return $this->noInteraction(); + } + return $this; + } + + /** + * adds `no-interaction` option to composer + * + * @return $this + */ + public function noInteraction() + { + $this->nointeraction = '--no-interaction'; + return $this; + } + + /** + * adds `optimize-autoloader` option to composer + * + * @return $this + */ + public function optimizeAutoloader($optimize = true) + { + if ($optimize) { + $this->option('--optimize-autoloader'); + } + return $this; + } + + /** + * adds `ignore-platform-reqs` option to composer + * + * @return $this + */ + public function ignorePlatformRequirements($ignore = true) + { + $this->option('--ignore-platform-reqs'); + return $this; + } + + /** + * disable plugins + * + * @return $this + */ + public function disablePlugins($disable = true) + { + if ($disable) { + $this->option('--no-plugins'); + } + return $this; + } + + /** + * skip scripts + * + * @return $this + */ + public function noScripts($disable = true) + { + if ($disable) { + $this->option('--no-scripts'); + } + return $this; + } + + /** + * adds `--working-dir $dir` option to composer + * + * @return $this + */ + public function workingDir($dir) + { + $this->option("--working-dir", $dir); + return $this; + } + + /** + * Copy class fields into command options as directed. + */ + public function buildCommand() + { + if (!isset($this->ansi) && $this->getConfig()->get(\Robo\Config\Config::DECORATED)) { + $this->ansi(); + } + if (!isset($this->nointeraction) && !$this->getConfig()->get(\Robo\Config\Config::INTERACTIVE)) { + $this->noInteraction(); + } + $this->option($this->prefer) + ->option($this->dev) + ->option($this->nointeraction) + ->option($this->ansi); + } + /** * {@inheritdoc} */ public function getCommand() { - if (!isset($this->ansi) && $this->getConfig()->isDecorated()) { - $this->ansi(); + if (!$this->built) { + $this->buildCommand(); + $this->built = true; } - $this->option($this->prefer) - ->option($this->dev) - ->option($this->optimizeAutoloader) - ->option($this->ansi); return "{$this->command} {$this->action}{$this->arguments}"; } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Config.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Config.php new file mode 100644 index 00000000..b5a6bbff --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Config.php @@ -0,0 +1,93 @@ +taskComposerConfig()->set('bin-dir', 'bin/')->run(); + * ?> + * ``` + */ +class Config extends Base +{ + /** + * {@inheritdoc} + */ + protected $action = 'config'; + + /** + * Set a configuration value + * @return $this + */ + public function set($key, $value) + { + $this->arg($key); + $this->arg($value); + return $this; + } + + /** + * Operate on the global repository + * @return $this + */ + public function useGlobal($useGlobal = true) + { + if ($useGlobal) { + $this->option('global'); + } + return $this; + } + + /** + * @return $this + */ + public function repository($id, $uri, $repoType = 'vcs') + { + $this->arg("repositories.$id"); + $this->arg($repoType); + $this->arg($uri); + return $this; + } + + /** + * @return $this + */ + public function removeRepository($id) + { + $this->option('unset', "repositories.$id"); + return $this; + } + + /** + * @return $this + */ + public function disableRepository($id) + { + $this->arg("repositories.$id"); + $this->arg('false'); + return $this; + } + + /** + * @return $this + */ + public function enableRepository($id) + { + $this->arg("repositories.$id"); + $this->arg('true'); + return $this; + } + + /** + * {@inheritdoc} + */ + public function run() + { + $command = $this->getCommand(); + $this->printTaskInfo('Configuring composer.json: {command}', ['command' => $command]); + return $this->executeCommand($command); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/CreateProject.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/CreateProject.php new file mode 100644 index 00000000..5f979a64 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/CreateProject.php @@ -0,0 +1,112 @@ +taskComposerCreateProject()->source('foo/bar')->target('myBar')->run(); + * ?> + * ``` + */ +class CreateProject extends Base +{ + /** + * {@inheritdoc} + */ + protected $action = 'create-project'; + + protected $source; + protected $target = ''; + protected $version = ''; + + /** + * @return $this + */ + public function source($source) + { + $this->source = $source; + return $this; + } + + /** + * @return $this + */ + public function target($target) + { + $this->target = $target; + return $this; + } + + /** + * @return $this + */ + public function version($version) + { + $this->version = $version; + return $this; + } + + public function keepVcs($keep = true) + { + if ($keep) { + $this->option('--keep-vcs'); + } + return $this; + } + + public function noInstall($noInstall = true) + { + if ($noInstall) { + $this->option('--no-install'); + } + return $this; + } + + /** + * @return $this + */ + public function repository($repository) + { + if (!empty($repository)) { + $this->option('repository', $repository); + } + return $this; + } + + /** + * @return $this + */ + public function stability($stability) + { + if (!empty($stability)) { + $this->option('stability', $stability); + } + return $this; + } + + public function buildCommand() + { + $this->arg($this->source); + if (!empty($this->target)) { + $this->arg($this->target); + } + if (!empty($this->version)) { + $this->arg($this->version); + } + + return parent::buildCommand(); + } + + /** + * {@inheritdoc} + */ + public function run() + { + $command = $this->getCommand(); + $this->printTaskInfo('Creating project: {command}', ['command' => $command]); + return $this->executeCommand($command); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php index 6297a2b4..55b1ea00 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php @@ -42,21 +42,14 @@ class DumpAutoload extends Base /** * @return $this */ - public function optimize() + public function optimize($optimize = true) { - $this->optimize = "--optimize"; + if ($optimize) { + $this->option("--optimize"); + } return $this; } - /** - * {@inheritdoc} - */ - public function getCommand() - { - $this->option($this->optimize); - return parent::getCommand(); - } - /** * {@inheritdoc} */ diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Init.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Init.php new file mode 100644 index 00000000..c841299d --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Init.php @@ -0,0 +1,115 @@ +taskComposerInit()->run(); + * ?> + * ``` + */ +class Init extends Base +{ + /** + * {@inheritdoc} + */ + protected $action = 'init'; + + /** + * @return $this + */ + public function projectName($projectName) + { + $this->option('name', $projectName); + return $this; + } + + /** + * @return $this + */ + public function description($description) + { + $this->option('description', $description); + return $this; + } + + /** + * @return $this + */ + public function author($author) + { + $this->option('author', $author); + return $this; + } + + /** + * @return $this + */ + public function projectType($type) + { + $this->option('type', $type); + return $this; + } + + /** + * @return $this + */ + public function homepage($homepage) + { + $this->option('homepage', $homepage); + return $this; + } + + /** + * 'require' is a keyword, so it cannot be a method name. + * @return $this + */ + public function dependency($project, $version = null) + { + if (isset($version)) { + $project .= ":$version"; + } + $this->option('require', $project); + return $this; + } + + /** + * @return $this + */ + public function stability($stability) + { + $this->option('stability', $stability); + return $this; + } + + /** + * @return $this + */ + public function license($license) + { + $this->option('license', $license); + return $this; + } + + /** + * @return $this + */ + public function repository($repository) + { + $this->option('repository', $repository); + return $this; + } + + /** + * {@inheritdoc} + */ + public function run() + { + $command = $this->getCommand(); + $this->printTaskInfo('Creating composer.json: {command}', ['command' => $command]); + return $this->executeCommand($command); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Remove.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Remove.php index 0011055a..b0316f05 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Remove.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Remove.php @@ -2,12 +2,12 @@ namespace Robo\Task\Composer; /** - * Composer Validate + * Composer Remove * * ``` php * taskComposerValidate()->run(); + * $this->taskComposerRemove()->run(); * ?> * ``` */ @@ -21,45 +21,55 @@ class Remove extends Base /** * @return $this */ - public function dev() + public function dev($dev = true) { - $this->option('--dev'); + if ($dev) { + $this->option('--dev'); + } return $this; } /** * @return $this */ - public function noProgress() + public function noProgress($noProgress = true) { - $this->option('--no-progress'); + if ($noProgress) { + $this->option('--no-progress'); + } return $this; } /** * @return $this */ - public function noUpdate() + public function noUpdate($noUpdate = true) { - $this->option('--no-update'); + if ($noUpdate) { + $this->option('--no-update'); + } return $this; } /** * @return $this */ - public function updateNoDev() + public function updateNoDev($updateNoDev = true) { - $this->option('--update-no-dev'); + if ($updateNoDev) { + $this->option('--update-no-dev'); + } return $this; } /** * @return $this */ - public function noUpdateWithDependencies() + public function noUpdateWithDependencies($updateWithDependencies = true) { - $this->option('--no-update-with-dependencies'); + if ($updateWithDependencies) { + $this->option('--no-update-with-dependencies'); + } return $this; } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php new file mode 100644 index 00000000..6cdbf613 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php @@ -0,0 +1,50 @@ +taskComposerRequire()->dependency('foo/bar', '^.2.4.8')->run(); + * ?> + * ``` + */ +class RequireDependency extends Base +{ + /** + * {@inheritdoc} + */ + protected $action = 'require'; + + /** + * 'require' is a keyword, so it cannot be a method name. + * @return $this + */ + public function dependency($project, $version = null) + { + $project = (array)$project; + + if (isset($version)) { + $project = array_map( + function ($item) use ($version) { + return "$item:$version"; + }, + $project + ); + } + $this->args($project); + return $this; + } + + /** + * {@inheritdoc} + */ + public function run() + { + $command = $this->getCommand(); + $this->printTaskInfo('Requiring packages: {command}', ['command' => $command]); + return $this->executeCommand($command); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Validate.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Validate.php index 6db6fdd1..adb15854 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Validate.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Validate.php @@ -18,90 +18,61 @@ class Validate extends Base */ protected $action = 'validate'; - /** - * @var string - */ - protected $noCheckAll; - - /** - * @var string - */ - protected $noCheckLock; - - /** - * @var string - */ - protected $noCheckPublish; - - /** - * @var string - */ - protected $withDependencies; - - /** - * @var string - */ - protected $strict; - /** * @return $this */ - public function noCheckAll() + public function noCheckAll($noCheckAll = true) { - $this->noCheckAll = '--no-check-all'; + if ($noCheckAll) { + $this->option('--no-check-all'); + } return $this; } /** * @return $this */ - public function noCheckLock() + public function noCheckLock($noCheckLock = true) { - $this->noCheckLock = '--no-check-lock'; + if ($noCheckLock) { + $this->option('--no-check-lock'); + } return $this; } /** * @return $this */ - public function noCheckPublish() + public function noCheckPublish($noCheckPublish = true) { - $this->noCheckPublish = '--no-check-publish'; + if ($noCheckPublish) { + $this->option('--no-check-publish'); + } return $this; } /** * @return $this */ - public function withDependencies() + public function withDependencies($withDependencies = true) { - $this->withDependencies = '--with-dependencies'; + if ($withDependencies) { + $this->option('--with-dependencies'); + } return $this; } /** * @return $this */ - public function strict() + public function strict($strict = true) { - $this->strict = '--strict'; + if ($strict) { + $this->option('--strict'); + } return $this; } - /** - * {@inheritdoc} - */ - public function getCommand() - { - $this->option($this->noCheckAll); - $this->option($this->noCheckLock); - $this->option($this->noCheckPublish); - $this->option($this->withDependencies); - $this->option($this->strict); - - return parent::getCommand(); - } - /** * {@inheritdoc} */ diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/loadTasks.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/loadTasks.php index 50dab2ec..6b074ba3 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/loadTasks.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/loadTasks.php @@ -33,6 +33,26 @@ trait loadTasks return $this->task(DumpAutoload::class, $pathToComposer); } + /** + * @param null|string $pathToComposer + * + * @return Init + */ + protected function taskComposerInit($pathToComposer = null) + { + return $this->task(Init::class, $pathToComposer); + } + + /** + * @param null|string $pathToComposer + * + * @return Init + */ + protected function taskComposerConfig($pathToComposer = null) + { + return $this->task(Config::class, $pathToComposer); + } + /** * @param null|string $pathToComposer * @@ -52,4 +72,24 @@ trait loadTasks { return $this->task(Remove::class, $pathToComposer); } + + /** + * @param null|string $pathToComposer + * + * @return Remove + */ + protected function taskComposerRequire($pathToComposer = null) + { + return $this->task(RequireDependency::class, $pathToComposer); + } + + /** + * @param null|string $pathToComposer + * + * @return Remove + */ + protected function taskComposerCreateProject($pathToComposer = null) + { + return $this->task(CreateProject::class, $pathToComposer); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/Changelog.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/Changelog.php index ce281852..44af6d82 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/Changelog.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/Changelog.php @@ -2,10 +2,7 @@ namespace Robo\Task\Development; use Robo\Task\BaseTask; -use Robo\Task\File\Replace; -use Robo\Task\Filesystem; use Robo\Result; -use Robo\Task\Development; use Robo\Contract\BuilderAwareInterface; use Robo\Common\BuilderAwareTrait; @@ -33,10 +30,6 @@ use Robo\Common\BuilderAwareTrait; * ->run(); * ?> * ``` - * - * @method Development\Changelog filename(string $filename) - * @method Development\Changelog anchor(string $anchor) - * @method Development\Changelog version(string $version) */ class Changelog extends BaseTask implements BuilderAwareInterface { @@ -62,6 +55,16 @@ class Changelog extends BaseTask implements BuilderAwareInterface */ protected $version = ""; + /** + * @var string + */ + protected $body = ""; + + /** + * @var string + */ + protected $header = ""; + /** * @param string $filename * @@ -73,6 +76,32 @@ class Changelog extends BaseTask implements BuilderAwareInterface return $this; } + /** + * Sets the changelog body text. + * + * This method permits the raw changelog text to be set directly If this is set, $this->log changes will be ignored. + * + * @param string $body + * + * @return $this + */ + public function setBody($body) + { + $this->body = $body; + return $this; + } + + /** + * @param string $header + * + * @return $this + */ + public function setHeader($header) + { + $this->header = $header; + return $this; + } + /** * @param string $item * @@ -149,20 +178,17 @@ class Changelog extends BaseTask implements BuilderAwareInterface */ public function run() { - if (empty($this->log)) { - return Result::error($this, "Changelog is empty"); + if (empty($this->body)) { + if (empty($this->log)) { + return Result::error($this, "Changelog is empty"); + } + $this->body = $this->generateBody(); } - $text = implode( - "\n", - array_map( - function ($i) { - return "* $i *" . date('Y-m-d') . "*"; - }, - $this->log - ) - ) . "\n"; - $ver = "#### {$this->version}\n\n"; - $text = $ver . $text; + if (empty($this->header)) { + $this->header = $this->generateHeader(); + } + + $text = $this->header . $this->body; if (!file_exists($this->filename)) { $this->printTaskInfo('Creating {filename}', ['filename' => $this->filename]); @@ -174,13 +200,13 @@ class Changelog extends BaseTask implements BuilderAwareInterface /** @var \Robo\Result $result */ // trying to append to changelog for today - $result = $this->collectionBuilder()->taskReplace($this->filename) - ->from($ver) + $result = $this->collectionBuilder()->taskReplaceInFile($this->filename) + ->from($this->header) ->to($text) ->run(); if (!isset($result['replaced']) || !$result['replaced']) { - $result = $this->collectionBuilder()->taskReplace($this->filename) + $result = $this->collectionBuilder()->taskReplaceInFile($this->filename) ->from($this->anchor) ->to($this->anchor . "\n\n" . $text) ->run(); @@ -188,4 +214,33 @@ class Changelog extends BaseTask implements BuilderAwareInterface return new Result($this, $result->getExitCode(), $result->getMessage(), $this->log); } + + /** + * @return \Robo\Result|string + */ + protected function generateBody() + { + $text = implode("\n", array_map([$this, 'processLogRow'], $this->log)); + $text .= "\n"; + + return $text; + } + + /** + * @return string + */ + protected function generateHeader() + { + return "#### {$this->version}\n\n"; + } + + /** + * @param $i + * + * @return string + */ + public function processLogRow($i) + { + return "* $i *" . date('Y-m-d') . "*"; + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php index 2387199f..0c3ec26c 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php @@ -2,10 +2,7 @@ namespace Robo\Task\Development; use Robo\Task\BaseTask; -use Robo\Task\File\Write; -use Robo\Task\Filesystem; use Robo\Result; -use Robo\Task\Development; use Robo\Contract\BuilderAwareInterface; use Robo\Common\BuilderAwareTrait; @@ -41,24 +38,6 @@ use Robo\Common\BuilderAwareTrait; * return strpos($r->name, 'save')===0 ? "[Saves to the database]\n" . $text : $text; * })->run(); * ``` - * - * @method \Robo\Task\Development\GenerateMarkdownDoc docClass(string $classname) put a class you want to be documented - * @method \Robo\Task\Development\GenerateMarkdownDoc filterMethods(\Closure $func) using callback function filter out methods that won't be documented - * @method \Robo\Task\Development\GenerateMarkdownDoc filterClasses(\Closure $func) using callback function filter out classes that won't be documented - * @method \Robo\Task\Development\GenerateMarkdownDoc filterProperties(\Closure $func) using callback function filter out properties that won't be documented - * @method \Robo\Task\Development\GenerateMarkdownDoc processClass(\Closure $func) post-process class documentation - * @method \Robo\Task\Development\GenerateMarkdownDoc processClassSignature(\Closure $func) post-process class signature. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processClassDocBlock(\Closure $func) post-process class docblock contents. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processMethod(\Closure $func) post-process method documentation. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processMethodSignature(\Closure $func) post-process method signature. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processMethodDocBlock(\Closure $func) post-process method docblock contents. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processProperty(\Closure $func) post-process property documentation. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processPropertySignature(\Closure $func) post-process property signature. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processPropertyDocBlock(\Closure $func) post-process property docblock contents. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc reorder(\Closure $func) use a function to reorder classes - * @method \Robo\Task\Development\GenerateMarkdownDoc reorderMethods(\Closure $func) use a function to reorder methods in class - * @method \Robo\Task\Development\GenerateMarkdownDoc prepend($text) inserts text into beginning of markdown file - * @method \Robo\Task\Development\GenerateMarkdownDoc append($text) inserts text in the end of markdown file */ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface { @@ -190,6 +169,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Put a class you want to be documented. + * * @param string $item * * @return $this @@ -201,6 +182,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Using a callback function filter out methods that won't be documented. + * * @param callable $filterMethods * * @return $this @@ -212,6 +195,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Using a callback function filter out classes that won't be documented. + * * @param callable $filterClasses * * @return $this @@ -223,6 +208,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Using a callback function filter out properties that won't be documented. + * * @param callable $filterProperties * * @return $this @@ -234,6 +221,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Post-process class documentation. + * * @param callable $processClass * * @return $this @@ -245,6 +234,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Post-process class signature. Provide *false* to skip. + * * @param callable|false $processClassSignature * * @return $this @@ -256,6 +247,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Post-process class docblock contents. Provide *false* to skip. + * * @param callable|false $processClassDocBlock * * @return $this @@ -267,6 +260,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Post-process method documentation. Provide *false* to skip. + * * @param callable|false $processMethod * * @return $this @@ -278,6 +273,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Post-process method signature. Provide *false* to skip. + * * @param callable|false $processMethodSignature * * @return $this @@ -289,6 +286,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Post-process method docblock contents. Provide *false* to skip. + * * @param callable|false $processMethodDocBlock * * @return $this @@ -300,6 +299,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Post-process property documentation. Provide *false* to skip. + * * @param callable|false $processProperty * * @return $this @@ -311,6 +312,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Post-process property signature. Provide *false* to skip. + * * @param callable|false $processPropertySignature * * @return $this @@ -322,6 +325,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Post-process property docblock contents. Provide *false* to skip. + * * @param callable|false $processPropertyDocBlock * * @return $this @@ -333,6 +338,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Use a function to reorder classes. + * * @param callable $reorder * * @return $this @@ -344,6 +351,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Use a function to reorder methods in class. + * * @param callable $reorderMethods * * @return $this @@ -377,6 +386,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Inserts text at the beginning of markdown file. + * * @param string $prepend * * @return $this @@ -388,6 +399,8 @@ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface } /** + * Inserts text at the end of markdown file. + * * @param string $append * * @return $this diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateTask.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateTask.php index e5040575..9d7a698e 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateTask.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateTask.php @@ -2,7 +2,6 @@ namespace Robo\Task\Development; use Robo\Task\BaseTask; -use Symfony\Component\Process\ProcessUtils; use Robo\Result; /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHub.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHub.php index 3fd89723..9fc9909d 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHub.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHub.php @@ -4,13 +4,9 @@ namespace Robo\Task\Development; use Robo\Exception\TaskException; use Robo\Task\BaseTask; -/** - * @method \Robo\Task\Development\GitHub repo(string) - * @method \Robo\Task\Development\GitHub owner(string) - */ abstract class GitHub extends BaseTask { - const GITHUB_URL = 'https://Api.github.com'; + const GITHUB_URL = 'https://api.github.com'; /** * @var string @@ -32,6 +28,11 @@ abstract class GitHub extends BaseTask */ protected $owner; + /** + * @var string + */ + protected $accessToken; + /** * @param string $repo * @@ -95,6 +96,17 @@ abstract class GitHub extends BaseTask return $this; } + /** + * @param $accessToken + * + * @return $this + */ + public function accessToken($token) + { + $this->accessToken = $token; + return $this; + } + /** * @param string $uri * @param array $params @@ -119,6 +131,10 @@ abstract class GitHub extends BaseTask curl_setopt($ch, CURLOPT_USERPWD, $this->user . ':' . $this->password); } + if (!empty($this->accessToken)) { + $url .= "?access_token=" . $this->accessToken; + } + curl_setopt_array( $ch, array( diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php index ac9743e0..bf7a4889 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php @@ -190,7 +190,7 @@ class GitHubRelease extends GitHub [ "tag_name" => $this->tag, "target_commitish" => $this->comittish, - "name" => $this->tag, + "name" => $this->name, "body" => $this->getBody(), "draft" => $this->draft, "prerelease" => $this->prerelease diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php index 867216ea..ea01b326 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php @@ -2,7 +2,7 @@ namespace Robo\Task\Development; use Robo\Task\BaseTask; -use Symfony\Component\Process\ProcessUtils; +use Robo\Common\ProcessUtils; use Robo\Result; /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/PackPhar.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/PackPhar.php index 3565dcbc..6d0a04d7 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/PackPhar.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/PackPhar.php @@ -2,7 +2,6 @@ namespace Robo\Task\Development; use Robo\Contract\ProgressIndicatorAwareInterface; -use Robo\Common\ProgressIndicatorAwareTrait; use Robo\Contract\PrintedInterface; use Robo\Result; use Robo\Task\BaseTask; diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/SemVer.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/SemVer.php index b9fb5929..6c807d89 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/SemVer.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/SemVer.php @@ -23,6 +23,8 @@ class SemVer implements TaskInterface const REGEX = "/^\-\-\-\n:major:\s(0|[1-9]\d*)\n:minor:\s(0|[1-9]\d*)\n:patch:\s(0|[1-9]\d*)\n:special:\s'([a-zA-z0-9]*\.?(?:0|[1-9]\d*)?)'\n:metadata:\s'((?:0|[1-9]\d*)?(?:\.[a-zA-z0-9\.]*)?)'/"; + const REGEX_STRING = '/^(?[0-9]+)\.(?[0-9]+)\.(?[0-9]+)(|-(?[0-9a-zA-Z.]+))(|\+(?[0-9a-zA-Z.]+))$/'; + /** * @var string */ @@ -62,7 +64,8 @@ class SemVer implements TaskInterface $this->path = $filename; if (file_exists($this->path)) { - $this->parse(); + $semverFileContents = file_get_contents($this->path); + $this->parseFile($semverFileContents); } } @@ -85,6 +88,12 @@ class SemVer implements TaskInterface return str_replace($search, $replace, $this->format); } + public function version($version) + { + $this->parseString($version); + return $this; + } + /** * @param string $format * @@ -208,6 +217,9 @@ class SemVer implements TaskInterface */ protected function dump() { + if (empty($this->path)) { + return true; + } extract($this->version); $semver = sprintf(self::SEMVER, $major, $minor, $patch, $special, $metadata); if (is_writeable($this->path) === false || file_put_contents($this->path, $semver) === false) { @@ -216,14 +228,24 @@ class SemVer implements TaskInterface return true; } + protected function parseString($semverString) + { + if (!preg_match_all(self::REGEX_STRING, $semverString, $matches)) { + throw new TaskException($this, 'Bad semver value: ' . $semverString); + } + + $this->version = array_intersect_key($matches, $this->version); + $this->version = array_map(function ($item) { + return $item[0]; + }, $this->version); + } + /** * @throws \Robo\Exception\TaskException */ - protected function parse() + protected function parseFile($semverFileContents) { - $output = file_get_contents($this->path); - - if (!preg_match_all(self::REGEX, $output, $matches)) { + if (!preg_match_all(self::REGEX, $semverFileContents, $matches)) { throw new TaskException($this, 'Bad semver file.'); } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Base.php b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Base.php index 9ecc3b6b..135f39e7 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Base.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Base.php @@ -2,10 +2,11 @@ namespace Robo\Task\Docker; use Robo\Common\ExecOneCommand; +use Robo\Contract\CommandInterface; use Robo\Contract\PrintedInterface; use Robo\Task\BaseTask; -abstract class Base extends BaseTask implements PrintedInterface +abstract class Base extends BaseTask implements CommandInterface, PrintedInterface { use ExecOneCommand; @@ -20,7 +21,6 @@ abstract class Base extends BaseTask implements PrintedInterface public function run() { $command = $this->getCommand(); - $this->printTaskInfo('Running {command}', ['command' => $command]); return $this->executeCommand($command); } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Exec.php b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Exec.php index f26942e3..fa67c8da 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Exec.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Exec.php @@ -64,12 +64,14 @@ class Exec extends Base } /** - * @return $this + * {@inheritdoc)} */ - public function interactive() + public function interactive($interactive = true) { - $this->option('-i'); - return $this; + if ($interactive) { + $this->option('-i'); + } + return parent::interactive($interactive); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Run.php b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Run.php index f6661b63..a02ea76f 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Run.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Run.php @@ -115,12 +115,14 @@ class Run extends Base } /** - * @return $this + * {@inheritdoc)} */ - public function interactive() + public function interactive($interactive = true) { - $this->option('-i'); - return $this; + if ($interactive) { + $this->option('-i'); + } + return parent::interactive($interactive); } /** @@ -147,13 +149,29 @@ class Run extends Base return $this; } + /** + * Set environment variables. + * n.b. $this->env($variable, $value) also available here, + * inherited from ExecTrait. + * + * @param array $env + * @return type + */ + public function envVars(array $env) + { + foreach ($env as $variable => $value) { + $this->setDockerEnv($variable, $value); + } + return $this; + } + /** * @param string $variable * @param null|string $value * * @return $this */ - public function env($variable, $value = null) + protected function setDockerEnv($variable, $value = null) { $env = $value ? "$variable=$value" : $variable; return $this->option("-e", $env); diff --git a/lib/composer/vendor/consolidation/robo/src/Task/File/Replace.php b/lib/composer/vendor/consolidation/robo/src/Task/File/Replace.php index 1c7f16a1..0107df13 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/File/Replace.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/File/Replace.php @@ -30,10 +30,6 @@ use Robo\Task\BaseTask; * ->run(); * ?> * ``` - * - * @method regex(string) regex to match string to be replaced - * @method from(string|array) string(s) to be replaced - * @method to(string|array) value(s) to be set as a replacement */ class Replace extends BaseTask { @@ -43,12 +39,12 @@ class Replace extends BaseTask protected $filename; /** - * @var string[] + * @var string|string[] */ protected $from; /** - * @var string[] + * @var string|string[] */ protected $to; @@ -77,7 +73,9 @@ class Replace extends BaseTask } /** - * @param string $from + * String(s) to be replaced. + * + * @param string|string[] $from * * @return $this */ @@ -88,7 +86,9 @@ class Replace extends BaseTask } /** - * @param string $to + * Value(s) to be set as a replacement. + * + * @param string|string[] $to * * @return $this */ @@ -99,6 +99,8 @@ class Replace extends BaseTask } /** + * Regex to match string to be replaced. + * * @param string $regex * * @return $this diff --git a/lib/composer/vendor/consolidation/robo/src/Task/File/TmpFile.php b/lib/composer/vendor/consolidation/robo/src/Task/File/TmpFile.php index 7c796d4c..4a18691d 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/File/TmpFile.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/File/TmpFile.php @@ -2,7 +2,6 @@ namespace Robo\Task\File; -use Robo\Collection\Collection; use Robo\Contract\CompletionInterface; /** @@ -36,15 +35,15 @@ class TmpFile extends Write implements CompletionInterface */ public function __construct($filename = 'tmp', $extension = '', $baseDir = '', $includeRandomPart = true) { - if (empty($base)) { - $base = sys_get_temp_dir(); + if (empty($baseDir)) { + $baseDir = sys_get_temp_dir(); } if ($includeRandomPart) { $random = static::randomString(); $filename = "{$filename}_{$random}"; } $filename .= $extension; - parent::__construct("{$base}/{$filename}"); + parent::__construct("{$baseDir}/{$filename}"); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/File/Write.php b/lib/composer/vendor/consolidation/robo/src/Task/File/Write.php index 6f0dae3a..dc2199f9 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/File/Write.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/File/Write.php @@ -17,8 +17,6 @@ use Robo\Task\BaseTask; * ->run(); * ?> * ``` - * - * @method append() */ class Write extends BaseTask { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/File/loadTasks.php b/lib/composer/vendor/consolidation/robo/src/Task/File/loadTasks.php index 76ef7230..c5f39c95 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/File/loadTasks.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/File/loadTasks.php @@ -1,8 +1,6 @@ exclude = $exclude; + $this->exclude = $this->simplifyForCompare($exclude); + return $this; + } + + /** + * Destination files newer than source files are overwritten. + * + * @param bool $overwrite + * + * @return $this + */ + public function overwrite($overwrite) + { + $this->overwrite = $overwrite; return $this; } @@ -82,10 +109,11 @@ class CopyDir extends BaseDir * * @param string $src Source directory * @param string $dst Destination directory + * @param string $parent Parent directory * * @throws \Robo\Exception\TaskException */ - protected function copyDir($src, $dst) + protected function copyDir($src, $dst, $parent = '') { $dir = @opendir($src); if (false === $dir) { @@ -95,19 +123,40 @@ class CopyDir extends BaseDir mkdir($dst, $this->chmod, true); } while (false !== ($file = readdir($dir))) { - if (in_array($file, $this->exclude)) { - continue; + // Support basename and full path exclusion. + if ($this->excluded($file, $src, $parent)) { + continue; } - if (($file !== '.') && ($file !== '..')) { - $srcFile = $src . '/' . $file; - $destFile = $dst . '/' . $file; - if (is_dir($srcFile)) { - $this->copyDir($srcFile, $destFile); - } else { - copy($srcFile, $destFile); - } + $srcFile = $src . '/' . $file; + $destFile = $dst . '/' . $file; + if (is_dir($srcFile)) { + $this->copyDir($srcFile, $destFile, $parent . $file . DIRECTORY_SEPARATOR); + } else { + $this->fs->copy($srcFile, $destFile, $this->overwrite); } } closedir($dir); } + + /** + * Check to see if the current item is excluded. + */ + protected function excluded($file, $src, $parent) + { + return + ($file == '.') || + ($file == '..') || + in_array($file, $this->exclude) || + in_array($this->simplifyForCompare($parent . $file), $this->exclude) || + in_array($this->simplifyForCompare($src . DIRECTORY_SEPARATOR . $file), $this->exclude); + } + + /** + * Avoid problems comparing paths on Windows that may have a + * combination of DIRECTORY_SEPARATOR and /. + */ + protected function simplifyForCompare($item) + { + return str_replace(DIRECTORY_SEPARATOR, '/', $item); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php index 2a0e115a..8663e245 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php @@ -1,10 +1,8 @@ * ``` * - * @method $this mkdir($dir) - * @method $this touch($file) - * @method $this copy($from, $to, $force = null) - * @method $this chmod($file, $permissions, $umask = null, $recursive = null) - * @method $this chgrp($file, $group, $recursive = null) - * @method $this chown($file, $user, $recursive = null) - * @method $this remove($file) - * @method $this rename($from, $to) - * @method $this symlink($from, $to) - * @method $this mirror($from, $to) + * @method $this mkdir(string|array|\Traversable $dir, int $mode = 0777) + * @method $this touch(string|array|\Traversable $file, int $time = null, int $atime = null) + * @method $this copy(string $from, string $to, bool $force = false) + * @method $this chmod(string|array|\Traversable $file, int $permissions, int $umask = 0000, bool $recursive = false) + * @method $this chgrp(string|array|\Traversable $file, string $group, bool $recursive = false) + * @method $this chown(string|array|\Traversable $file, string $user, bool $recursive = false) + * @method $this remove(string|array|\Traversable $file) + * @method $this rename(string $from, string $to, bool $force = false) + * @method $this symlink(string $from, string $to, bool $copyOnWindows = false) + * @method $this mirror(string $from, string $to, \Traversable $iterator = null, array $options = []) */ class FilesystemStack extends StackBasedTask implements BuilderAwareInterface { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/TmpDir.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/TmpDir.php index 8cf44f89..104318de 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/TmpDir.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/TmpDir.php @@ -3,7 +3,6 @@ namespace Robo\Task\Filesystem; use Robo\Result; -use Robo\Collection\Collection; use Robo\Contract\CompletionInterface; /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/WorkDir.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/WorkDir.php index 3c445b8b..4b75c6ed 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/WorkDir.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/WorkDir.php @@ -3,8 +3,6 @@ namespace Robo\Task\Filesystem; use Robo\Result; -use Robo\Collection\Collection; -use Robo\Contract\CompletionInterface; use Robo\Contract\RollbackInterface; use Robo\Contract\BuilderAwareInterface; use Robo\Common\BuilderAwareTrait; diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php index 3a670a93..fe72ce5a 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php @@ -1,8 +1,6 @@ taskFilesystemStack()->rename($from, $to)->run(); + return $this->taskFilesystemStack()->rename($from, $to, $overwrite)->run(); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php index 932e8332..8fecaaff 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php @@ -1,8 +1,6 @@ run(); * } * ``` - * - * @method \Robo\Task\Remote\Rsync fromUser(string $user) - * @method \Robo\Task\Remote\Rsync fromHost(string $hostname) - * @method \Robo\Task\Remote\Rsync toUser(string $user) - * @method \Robo\Task\Remote\Rsync toHost(string $hostname) */ class Rsync extends BaseTask implements CommandInterface { @@ -432,7 +426,6 @@ class Rsync extends BaseTask implements CommandInterface public function run() { $command = $this->getCommand(); - $this->printTaskInfo("Running {command}", ['command' => $command]); return $this->executeCommand($command); } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Remote/Ssh.php b/lib/composer/vendor/consolidation/robo/src/Task/Remote/Ssh.php index 500e29fc..69df9fe2 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Remote/Ssh.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Remote/Ssh.php @@ -2,7 +2,6 @@ namespace Robo\Task\Remote; -use Robo\Result; use Robo\Contract\CommandInterface; use Robo\Exception\TaskException; use Robo\Task\BaseTask; @@ -41,10 +40,6 @@ use Robo\Contract\SimulatedInterface; * ```php * \Robo\Task\Remote\Ssh::configure('remoteDir', '/some-dir'); * ``` - * - * @method $this stopOnFail(bool $stopOnFail) Whether or not to chain commands together with && - * and stop the chain if one command fails - * @method $this remoteDir(string $remoteWorkingDirectory) Changes to the given directory before running commands */ class Ssh extends BaseTask implements CommandInterface, SimulatedInterface { @@ -111,6 +106,8 @@ class Ssh extends BaseTask implements CommandInterface, SimulatedInterface } /** + * Whether or not to chain commands together with && and stop the chain if one command fails. + * * @param bool $stopOnFail * * @return $this @@ -122,6 +119,8 @@ class Ssh extends BaseTask implements CommandInterface, SimulatedInterface } /** + * Changes to the given directory before running commands. + * * @param string $remoteDir * * @return $this @@ -269,6 +268,6 @@ class Ssh extends BaseTask implements CommandInterface, SimulatedInterface $hostSpec = $this->user . '@' . $hostSpec; } - return sprintf("ssh{$sshOptions} {$hostSpec} '{$command}'"); + return "ssh{$sshOptions} {$hostSpec} '{$command}'"; } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Simulator.php b/lib/composer/vendor/consolidation/robo/src/Task/Simulator.php index bc5f555b..e69d23fa 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Simulator.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Simulator.php @@ -8,7 +8,6 @@ use Robo\Result; use Robo\Contract\TaskInterface; use Robo\Contract\SimulatedInterface; use Robo\Log\RoboLogLevel; -use Psr\Log\LogLevel; use Robo\Contract\CommandInterface; class Simulator extends BaseTask implements CommandInterface diff --git a/lib/composer/vendor/consolidation/robo/src/Task/StackBasedTask.php b/lib/composer/vendor/consolidation/robo/src/Task/StackBasedTask.php index 868fead8..91659f33 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/StackBasedTask.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/StackBasedTask.php @@ -2,8 +2,6 @@ namespace Robo\Task; use Robo\Result; -use Robo\Task\BaseTask; -use Robo\Contract\TaskInterface; /** * Extend StackBasedTask to create a Robo task that @@ -116,7 +114,7 @@ abstract class StackBasedTask extends BaseTask */ protected function printTaskProgress($command, $action) { - $this->printTaskInfo('{command} {action}', ['command' => "{$command[1]}", 'action' => json_encode($action)]); + $this->printTaskInfo('{command} {action}', ['command' => "{$command[1]}", 'action' => json_encode($action, JSON_UNESCAPED_SLASHES)]); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Testing/Behat.php b/lib/composer/vendor/consolidation/robo/src/Task/Testing/Behat.php index a5d9ea0a..7e4f1d41 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Testing/Behat.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Testing/Behat.php @@ -53,7 +53,6 @@ class Behat extends BaseTask implements CommandInterface, PrintedInterface if (!$this->command) { throw new \Robo\Exception\TaskException(__CLASS__, "Neither composer nor phar installation of Behat found"); } - $this->arg('run'); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Testing/Codecept.php b/lib/composer/vendor/consolidation/robo/src/Task/Testing/Codecept.php index 442540a1..1f8cce70 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Testing/Codecept.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Testing/Codecept.php @@ -5,6 +5,7 @@ use Robo\Contract\PrintedInterface; use Robo\Exception\TaskException; use Robo\Task\BaseTask; use Robo\Contract\CommandInterface; +use Symfony\Component\Process\Process; /** * Executes Codeception tests @@ -27,17 +28,7 @@ use Robo\Contract\CommandInterface; class Codecept extends BaseTask implements CommandInterface, PrintedInterface { use \Robo\Common\ExecOneCommand; - - /** - * @var string - */ - protected $suite = ''; - - /** - * @var string - */ - protected $test = ''; - + /** * @var string */ @@ -67,7 +58,7 @@ class Codecept extends BaseTask implements CommandInterface, PrintedInterface */ public function suite($suite) { - $this->suite = $suite; + $this->option(null, $suite); return $this; } @@ -78,7 +69,7 @@ class Codecept extends BaseTask implements CommandInterface, PrintedInterface */ public function test($testName) { - $this->test = $testName; + $this->option(null, $testName); return $this; } @@ -241,13 +232,30 @@ class Codecept extends BaseTask implements CommandInterface, PrintedInterface return $this; } + /** + * @return $this + */ + public function noRebuild() + { + $this->option("no-rebuild"); + return $this; + } + + /** + * @param string $failGroup + * @return $this + */ + public function failGroup($failGroup) + { + $this->option('override', "extensions: config: Codeception\\Extension\\RunFailed: fail-group: {$failGroup}"); + return $this; + } + /** * {@inheritdoc} */ public function getCommand() { - $this->option(null, $this->suite) - ->option(null, $this->test); return $this->command . $this->arguments; } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Vcs/GitStack.php b/lib/composer/vendor/consolidation/robo/src/Task/Vcs/GitStack.php index 9210bfec..6cb1783f 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Vcs/GitStack.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Vcs/GitStack.php @@ -2,7 +2,7 @@ namespace Robo\Task\Vcs; use Robo\Task\CommandStack; -use Symfony\Component\Process\ProcessUtils; +use Robo\Common\ProcessUtils; /** * Runs Git commands in stack. You can use `stopOnFail()` to point that stack should be terminated on first fail. @@ -45,9 +45,33 @@ class GitStack extends CommandStack * * @return $this */ - public function cloneRepo($repo, $to = "") + public function cloneRepo($repo, $to = "", $branch = "") { - return $this->exec(['clone', $repo, $to]); + $cmd = ['clone', $repo, $to]; + if (!empty($branch)) { + $cmd[] = "--branch $branch"; + } + return $this->exec($cmd); + } + + /** + * Executes `git clone` with depth 1 as default + * + * @param string $repo + * @param string $to + * @param string $branch + * @param int $depth + * + * @return $this + */ + public function cloneShallow($repo, $to = '', $branch = "", $depth = 1) + { + $cmd = ["clone --depth $depth", $repo, $to]; + if (!empty($branch)) { + $cmd[] = "--branch $branch"; + } + + return $this->exec($cmd); } /** diff --git a/lib/composer/vendor/consolidation/robo/tests/_bootstrap.php b/lib/composer/vendor/consolidation/robo/tests/_bootstrap.php deleted file mode 100644 index 6e310e1f..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_bootstrap.php +++ /dev/null @@ -1,12 +0,0 @@ -init([ - 'debug' => true, - 'includePaths' => [ - __DIR__.'/../src', - __DIR__.'/../vendor/symfony/process', - __DIR__.'/../vendor/symfony/console', - ] -]); diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboFile.php b/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboFile.php deleted file mode 100644 index bc11796f..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboFile.php +++ /dev/null @@ -1,38 +0,0 @@ - false, 'to' => null]) { - } - - /** - * Calculate the fibonacci sequence between two numbers. - * - * Graphic output will look like - * +----+---+-------------+ - * | | | | - * | |-+-| | - * |----+-+-+ | - * | | | - * | | | - * | | | - * +--------+-------------+ - * - * @param int $start Number to start from - * @param int $steps Number of steps to perform - * @param array $opts - * @option $graphic Display the sequence graphically using cube - * representation - */ - public function fibonacci($start, $steps, $opts = ['graphic' => false]) - { - } - - /** Compact doc comment */ - public function compact() - { - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboTask.php b/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboTask.php deleted file mode 100644 index c1c5efba..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboTask.php +++ /dev/null @@ -1,61 +0,0 @@ -taskTestedRoboTask([ - * 'web/assets/screen.css', - * 'web/assets/print.css', - * 'web/assets/theme.css' - * ]) - * ->to('web/assets/style.css') - * ->run() - * ?> - * ``` - */ -class TestedRoboTask extends BaseTask -{ - /** - * @var array|Iterator files - */ - protected $files; - - /** - * @var string dst - */ - protected $dst; - - /** - * Constructor. This should not be documented - * - * @param array|Iterator $files - */ - public function __construct() - { - } - - /** - * Set the destination file - * - * @param string $dst - * - * @return Concat The current instance - */ - public function to($dst) - { - return $this; - } - - /** - * {@inheritdoc} - */ - public function run() - { - return Result::success($this); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/a.txt b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/a.txt deleted file mode 100644 index 8c7e5a66..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/a.txt +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/b.txt b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/b.txt deleted file mode 100644 index 7371f47a..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/b.txt +++ /dev/null @@ -1 +0,0 @@ -B \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/box/robo.txt b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/box/robo.txt deleted file mode 100644 index 3ba64572..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/box/robo.txt +++ /dev/null @@ -1 +0,0 @@ -HELLOROBO \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/existing_file b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/existing_file deleted file mode 100644 index 37cfa282..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/existing_file +++ /dev/null @@ -1 +0,0 @@ -some existing file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/nested/structu.re b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/nested/structu.re deleted file mode 100644 index 98a202cb..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/nested/structu.re +++ /dev/null @@ -1 +0,0 @@ -Just a file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some_destination/deeply/existing_file b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some_destination/deeply/existing_file deleted file mode 100644 index 1765b73b..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some_destination/deeply/existing_file +++ /dev/null @@ -1 +0,0 @@ -some_destination existing file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/dump.sql b/lib/composer/vendor/consolidation/robo/tests/_data/dump.sql deleted file mode 100644 index 4bc742ce..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/dump.sql +++ /dev/null @@ -1 +0,0 @@ -/* Replace this file with actual dump of your database */ \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/parascript.php b/lib/composer/vendor/consolidation/robo/tests/_data/parascript.php deleted file mode 100644 index 403e2f1c..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/parascript.php +++ /dev/null @@ -1,8 +0,0 @@ -getContainer()->get('collectionBuilder', [$tasks]); - $tasks->setBuilder($builder); - return $builder; - } - - public function seeDirFound($dir) - { - $this->assertTrue(is_dir($dir) && file_exists($dir), "Directory does not exist"); - } - - public function _before(\Codeception\TestCase $test) { - $container = new \League\Container\Container(); - $this->initSeeInOutputTrait($container); - Robo::setContainer($container); - $this->setContainer($container); - - $this->getModule('Filesystem')->copyDir(codecept_data_dir().'claypit', codecept_data_dir().'sandbox'); - } - - public function _after(\Codeception\TestCase $test) { - $this->getModule('Filesystem')->deleteDir(codecept_data_dir().'sandbox'); - $this->getContainer()->add('output', new ConsoleOutput()); - chdir(codecept_root_dir()); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_helpers/CodeGuy.php b/lib/composer/vendor/consolidation/robo/tests/_helpers/CodeGuy.php deleted file mode 100644 index e7ce5917..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_helpers/CodeGuy.php +++ /dev/null @@ -1,26 +0,0 @@ -initSeeInOutputTrait(static::$container); - } - - public function _after(\Codeception\TestCase $test) - { - // Ensure that $stopOnFail global static is reset, as tests - // that set it to true will force an exception, and therefor - // will not have a chance to clean this up. - \Robo\Result::$stopOnFail = false; - - \AspectMock\Test::clean(); - $consoleOutput = new ConsoleOutput(); - static::$container->add('output', $consoleOutput); - static::$container->add('logger', new \Consolidation\Log\Logger($consoleOutput)); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_helpers/SeeInOutputTrait.php b/lib/composer/vendor/consolidation/robo/tests/_helpers/SeeInOutputTrait.php deleted file mode 100644 index 85ae5335..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_helpers/SeeInOutputTrait.php +++ /dev/null @@ -1,62 +0,0 @@ -capturedOutput = ''; - $this->testPrinter = new BufferedOutput(OutputInterface::VERBOSITY_DEBUG); - - $app = Robo::createDefaultApplication(); - $config = new \Robo\Config(); - \Robo\Robo::configureContainer($container, $app, $config, $input, $this->testPrinter); - - // Set the application dispatcher - $app->setDispatcher($container->get('eventDispatcher')); - $this->logger = $container->get('logger'); - } - - public function capturedOutputStream() - { - return $this->testPrinter; - } - - public function logger() - { - return $this->logger; - } - - protected function accumulate() - { - $this->capturedOutput .= $this->testPrinter->fetch(); - return $this->capturedOutput; - } - - public function seeInOutput($value) - { - $output = $this->accumulate(); - $this->assertContains($value, $output); - } - - public function doNotSeeInOutput($value) - { - $output = $this->accumulate(); - $this->assertNotContains($value, $output); - } - - public function seeOutputEquals($value) - { - $output = $this->accumulate(); - $this->assertEquals($value, $output); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_helpers/TestHelper.php b/lib/composer/vendor/consolidation/robo/tests/_helpers/TestHelper.php deleted file mode 100644 index d25d90b7..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/_helpers/TestHelper.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('minify a css file'); -$I->amInPath(codecept_data_dir().'sandbox'); - -$sampleCss = dirname(__DIR__) . '/_data/sample.css'; -$outputCss = 'minifiedSample.css'; - -$initialFileSize = filesize($sampleCss); - -$I->taskMinify($sampleCss) - ->to('minifiedSample.css') - ->run(); - -$I->seeFileFound($outputCss); -$minifiedFileSize = filesize($outputCss); -$outputCssContents = file_get_contents($outputCss); - -$I->assertLessThan($initialFileSize, $minifiedFileSize, 'Minified file is smaller than the source file'); -$I->assertGreaterThan(0, $minifiedFileSize, 'Minified file is not empty'); -$I->assertContains('body', $outputCssContents, 'Minified file has some content from the source file'); -$I->assertNotContains('Sample css file', $outputCssContents, 'Minified file does not contain comment from source file'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CleanDirCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/CleanDirCept.php deleted file mode 100644 index 041f8b69..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CleanDirCept.php +++ /dev/null @@ -1,13 +0,0 @@ -wantTo('clean dir with DeleteDirTask'); -$I->amInPath(codecept_data_dir()); -$I->seeFileFound('robo.txt', 'sandbox'); -$I->taskCleanDir(['sandbox']) - ->run(); -$I->dontSeeFileFound('box', 'sandbox'); -$I->dontSeeFileFound('robo.txt', 'sandbox'); -$I->dontSeeFileFound('a.txt' , 'sandbox'); - - diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CollectionCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/CollectionCest.php deleted file mode 100644 index 493daf09..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CollectionCest.php +++ /dev/null @@ -1,409 +0,0 @@ -amInPath(codecept_data_dir().'sandbox'); - } - - public function toRunMultipleTasksViaACollectionBuilder(CliGuy $I) - { - // This tests creating multiple tasks in a single builder, - // which implicitly adds them to a collection. To keep things - // simple, we are only going to use taskFilesystemStack. It - // would be possible, of course, to do these operations with - // a single FilesystemStack, but our goal is to test creating - // multiple tasks with a builder, and ensure that a propper - // collection is built. - $collection = $I->collectionBuilder(); - $result = $collection->taskFilesystemStack() - ->mkdir('a') - ->touch('a/a.txt') - ->rollback( - $I->taskDeleteDir('a') - ) - ->taskFilesystemStack() - ->mkdir('a/b') - ->touch('a/b/b.txt') - ->taskFilesystemStack() - ->mkdir('a/c') - ->touch('a/c/c.txt') - ->run(); - - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->seeDirFound('a'); - $I->seeFileFound('a/a.txt'); - $I->seeDirFound('a/b'); - $I->seeFileFound('a/b/b.txt'); - $I->seeDirFound('a/c'); - $I->seeFileFound('a/c/c.txt'); - } - - public function toUseAWorkingDirWithACollectionBuilder(CliGuy $I) - { - // Run the same test with a working directory. The working - // directory path will point to a temporary directory which - // will be moved into place once the tasks complete. - $collection = $I->collectionBuilder(); - $workDirPath = $collection->workDir("build"); - $I->assertNotEquals("build", basename($workDirPath)); - $result = $collection->taskFilesystemStack() - ->mkdir("{$workDirPath}/a") - ->touch("{$workDirPath}/a/a.txt") - ->taskFilesystemStack() - ->mkdir("{$workDirPath}/a/b") - ->touch("{$workDirPath}/a/b/b.txt") - ->taskFilesystemStack() - ->mkdir("{$workDirPath}/a/c") - ->touch("{$workDirPath}/a/c/c.txt") - ->run(); - - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->seeDirFound('build/a'); - $I->seeFileFound('build/a/a.txt'); - $I->seeDirFound('build/a/b'); - $I->seeFileFound('build/a/b/b.txt'); - $I->seeDirFound('build/a/c'); - $I->seeFileFound('build/a/c/c.txt'); - } - - public function toRollbackAfterFailureViaACollectionBuilder(CliGuy $I) - { - // This is like the previous test, toRunMultipleTasksViaACollectionBuilder, - // except we force an error at the end, and confirm that the - // rollback function is called. - $collection = $I->collectionBuilder(); - $result = $collection->taskFilesystemStack() - ->mkdir('j') - ->touch('j/j.txt') - ->rollback( - $I->taskDeleteDir('j') - ) - ->taskFilesystemStack() - ->mkdir('j/k') - ->touch('j/k/k.txt') - ->taskFilesystemStack() - ->mkdir('j/k/m') - ->touch('j/k/m/m.txt') - ->taskCopyDir(['doesNotExist' => 'copied']) - ->run(); - - $I->assertEquals(1, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->dontSeeFileFound('q/q.txt'); - $I->dontSeeFileFound('j/j.txt'); - $I->dontSeeFileFound('j/k/k.txt'); - $I->dontSeeFileFound('j/k/m/m.txt'); - } - - public function toRollbackAWorkingDir(CliGuy $I) - { - // Run the same test with a working directory. The working - // directory path will point to a temporary directory which - // will be moved into place once the tasks complete. - $collection = $I->collectionBuilder(); - $workDirPath = $collection->workDir("build"); - $I->assertNotEquals("build", basename($workDirPath)); - $result = $collection->taskFilesystemStack() - ->mkdir("{$workDirPath}/a") - ->touch("{$workDirPath}/a/a.txt") - ->taskFilesystemStack() - ->mkdir("{$workDirPath}/a/b") - ->touch("{$workDirPath}/a/b/b.txt") - ->taskFilesystemStack() - ->mkdir("{$workDirPath}/a/c") - ->touch("{$workDirPath}/a/c/c.txt") - ->taskCopyDir(['doesNotExist' => 'copied']) - ->run(); - - $I->assertEquals(1, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->dontSeeFileFound('build/a'); - $I->dontSeeFileFound($workDirPath); - } - - public function toBuildFilesViaAddIterable(CliGuy $I) - { - $processList = ['cats', 'dogs', 'sheep', 'fish', 'horses', 'cows']; - - $collection = $I->collectionBuilder(); - $result = $collection - ->taskFilesystemStack() - ->mkdir('stuff') - ->taskForEach($processList) - ->withBuilder( - function ($builder, $key, $value) { - return $builder - ->taskFilesystemStack() - ->touch("stuff/{$value}.txt"); - } - ) - ->run(); - - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - $I->seeFileFound('stuff/cats.txt'); - $I->seeFileFound('stuff/dogs.txt'); - $I->seeFileFound('stuff/sheep.txt'); - $I->seeFileFound('stuff/fish.txt'); - $I->seeFileFound('stuff/horses.txt'); - $I->seeFileFound('stuff/cows.txt'); - } - - public function toRollbackANestedCollection(CliGuy $I) - { - // This is like the previous test, toRunMultipleTasksViaACollectionBuilder, - // except we force an error at the end, and confirm that the - // rollback function is called. - $collection = $I->collectionBuilder(); - $collection->taskFilesystemStack() - ->mkdir('j') - ->touch('j/j.txt') - ->rollback( - $I->taskDeleteDir('j') - ) - ->taskFilesystemStack() - ->mkdir('j/k') - ->touch('j/k/k.txt') - ->taskFilesystemStack() - ->mkdir('j/k/m') - ->touch('j/k/m/m.txt'); - - $result = $I->collectionBuilder() - ->taskFilesystemStack() - ->mkdir('q') - ->touch('q/q.txt') - ->addTask($collection) - ->taskCopyDir(['doesNotExist' => 'copied']) - ->run(); - - $I->assertEquals(1, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->seeFileFound('q/q.txt'); - $I->dontSeeFileFound('j/j.txt'); - $I->dontSeeFileFound('j/k/k.txt'); - $I->dontSeeFileFound('j/k/m/m.txt'); - } - - public function toCreateDirViaCollection(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - - // Set up a filesystem stack - $collection->taskFilesystemStack() - ->mkdir('log') - ->touch('log/error.txt'); - - // FilesystemStack has not run yet, so file should not be found. - $I->dontSeeFileFound('log/error.txt'); - - // Run the task collection; now the files should be present - $collection->run(); - $I->seeFileFound('log/error.txt'); - $I->seeDirFound('log'); - } - - public function toUseATmpDirAndConfirmItIsDeleted(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - - // Get a temporary directory to work in. Note that we get a - // name back, but the directory is not created until the task - // runs. This technically is not thread-safe, but we create - // a random name, so it is unlikely to conflict. - $tmpPath = $collection->tmpDir(); - - // Set up a filesystem stack, but use a collection to defer execution - $collection->taskFilesystemStack() - ->mkdir("$tmpPath/tmp") - ->touch("$tmpPath/tmp/error.txt") - ->rename("$tmpPath/tmp", "$tmpPath/log"); - - // Copy our tmp directory to a location that is not transient - $collection->taskCopyDir([$tmpPath => 'copied']); - - // FilesystemStack has not run yet, so no files should be found. - $I->dontSeeFileFound("$tmpPath/tmp/error.txt"); - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - $I->dontSeeFileFound('copied/log/error.txt'); - - // Run the task collection - $result = $collection->run(); - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - $I->assertEquals($result['path'], $tmpPath, "Tmp dir result matches accessor."); - - // The file 'error.txt' should have been copied into the "copied" dir. - // This also proves that the tmp directory was created. - $I->seeFileFound('copied/log/error.txt'); - // $tmpPath should be deleted after $collection->run() completes. - $I->dontSeeFileFound("$tmpPath/tmp/error.txt"); - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - $I->dontSeeFileFound("$tmpPath"); - } - - public function toUseATmpDirAndChangeWorkingDirectory(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - - $cwd = getcwd(); - - $tmpPath = $collection->taskTmpDir() - ->cwd() - ->getPath(); - - // Set up a filesystem stack, but use a collection to defer execution. - // Note that since we used 'cwd()' above, the relative file paths - // used below will be inside the temporary directory. - $collection->taskFilesystemStack() - ->mkdir("log") - ->touch("log/error.txt"); - - // Copy our tmp directory to a location that is not transient - $collection->taskCopyDir(['log' => "$cwd/copied2"]); - - // FilesystemStack has not run yet, so no files should be found. - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - $I->dontSeeFileFound('$cwd/copied2/log/error.txt'); - - // Run the task collection - $result = $collection->run(); - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - // The file 'error.txt' should have been copied into the "copied" dir - $I->seeFileFound("$cwd/copied2/error.txt"); - // $tmpPath should be deleted after $collection->run() completes. - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - // Make sure that 'log' was created in the temporary directory, not - // at the current working directory. - $I->dontSeeFileFound("$cwd/log/error.txt"); - - // Make sure that our working directory was restored. - $finalWorkingDir = getcwd(); - $I->assertEquals($cwd, $finalWorkingDir); - } - - public function toCreateATmpFileAndConfirmItIsDeleted(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - - // Write to a temporary file. Note that we can get the path - // to the tempoary file that will be created, even though the - // the file is not created until the task collecction runs. - $tmpPath = $collection->taskTmpFile('tmp', '.txt') - ->line("This is a test file") - ->getPath(); - - // Copy our tmp directory to a location that is not transient - $collection->taskFilesystemStack() - ->copy($tmpPath, 'copied.txt'); - - // FilesystemStack has not run yet, so no files should be found. - $I->dontSeeFileFound("$tmpPath"); - $I->dontSeeFileFound('copied.txt'); - - // Run the task collection - $result = $collection->run(); - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - // The file 'copied.txt' should have been copied from the tmp file - $I->seeFileFound('copied.txt'); - // $tmpPath should be deleted after $collection->run() completes. - $I->dontSeeFileFound("$tmpPath"); - } - - public function toUseATmpDirWithAlternateSyntax(CliGuy $I) - { - $collection = $I->collectionBuilder(); - - // This test is equivalent to toUseATmpDirAndConfirmItIsDeleted, - // but uses a different technique to create a collection of tasks. - $tmpPath = $collection->tmpDir(); - - // Now, rather than creating the tasks with a collection builder, - // which automatically adds the tasks to the collection as they are - // created, we will instead create them individually and then add - // them to the collection via the addTaskList() method. - $result = $collection->addTaskList( - [ - $I->taskFilesystemStack()->mkdir("$tmpPath/log")->touch("$tmpPath/log/error.txt"), - $I->taskCopyDir([$tmpPath => 'copied3']), - ] - )->run(); - - // The results of this operation should be the same. - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - $I->seeFileFound('copied3/log/error.txt'); - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - } - - public function toCreateATmpDirWithoutACollection(CliGuy $I) - { - // Create a temporary directory, using our function name as - // the prefix for the directory name. - $tmpDirTask = $I->taskTmpDir(__FUNCTION__); - $tmpPath = $tmpDirTask->getPath(); - $I->dontSeeFileFound($tmpPath); - $tmpDirTask->run(); - $I->seeDirFound($tmpPath); - // Creating a temporary directory without a task collection will - // cause the temporary directory to be deleted when the program - // terminates. We can force it to clean up sooner by calling - // TransientManager::complete(); note that this deletes ALL global tmp - // directories, so this is not thread-safe! Useful in tests, though. - Temporary::complete(); - $I->dontSeeFileFound($tmpPath); - } - - public function toCreateATmpDirUsingShortcut(CliGuy $I) - { - // Create a temporary directory, using our function name as - // the prefix for the directory name. - $tmpPath = $I->shortcutTmpDir(__FUNCTION__); - $I->seeDirFound($tmpPath); - // Creating a temporary directory without a task collection will - // cause the temporary directory to be deleted when the program - // terminates. We can force it to clean up sooner by calling - // TransientManager::complete(); note that this deletes ALL global tmp - // directories, so this is not thread-safe! Useful in tests, though. - Temporary::complete(); - $I->dontSeeFileFound($tmpPath); - } - - public function toThrowAnExceptionAndConfirmItIsCaught(CliGuy $I) - { - $collection = $I->getContainer()->get('collection'); - - $collection->addCode( - function () { - throw new \RuntimeException('Error'); - } - ); - $result = $collection->run(); - $I->assertEquals('Error', $result->getMessage()); - $I->assertEquals(1, $result->getExitCode()); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/ConcatCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/ConcatCept.php deleted file mode 100644 index d68798a5..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/ConcatCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('concat files using Concat Task'); -$I->amInPath(codecept_data_dir() . 'sandbox'); -$I->taskConcat(['a.txt', 'b.txt']) - ->to('merged.txt') - ->run(); -$I->seeFileFound('merged.txt'); -$I->seeFileContentsEqual("A\nB\n"); - diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirCept.php deleted file mode 100644 index 1022ca2b..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('copy dir with CopyDir task'); -$I->amInPath(codecept_data_dir().'sandbox'); -$I->taskCopyDir(['box' => 'bin']) - ->run(); -$I->seeDirFound('bin'); -$I->seeFileFound('robo.txt', 'bin'); - diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirOverwritesFilesCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirOverwritesFilesCept.php deleted file mode 100644 index 03b02394..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirOverwritesFilesCept.php +++ /dev/null @@ -1,12 +0,0 @@ -wantTo('overwrite a file with CopyDir task'); -$I->amInPath(codecept_data_dir() . 'sandbox'); -$I->seeDirFound('some'); -$I->seeFileFound('existing_file', 'some'); -$I->taskCopyDir(['some' => 'some_destination']) - ->run(); -$I->seeFileFound('existing_file', 'some_destination/deeply'); -$I->openFile('some_destination/deeply/existing_file'); -$I->seeInThisFile('some existing file'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirRecursiveCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirRecursiveCept.php deleted file mode 100644 index a793faa2..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirRecursiveCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('copy dir recursively with CopyDir task'); -$I->amInPath(codecept_data_dir() . 'sandbox'); -$I->seeDirFound('some/deeply/nested'); -$I->seeFileFound('structu.re', 'some/deeply/nested'); -$I->taskCopyDir(['some/deeply' => 'some_destination/deeply']) - ->run(); -$I->seeDirFound('some_destination/deeply/nested'); -$I->seeFileFound('structu.re', 'some_destination/deeply/nested'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/DeleteDirCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/DeleteDirCept.php deleted file mode 100644 index ead565ff..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/DeleteDirCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('delete dir with DeleteDirTask'); -$I->amInPath(codecept_data_dir()); -$I->seeFileFound('robo.txt', 'sandbox'); -$I->taskDeleteDir(['sandbox/box']) - ->run(); -$I->dontSeeFileFound('box', 'sandbox'); -$I->dontSeeFileFound('robo.txt', 'sandbox'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/ExecCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/ExecCest.php deleted file mode 100644 index b8769246..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/ExecCest.php +++ /dev/null @@ -1,13 +0,0 @@ -taskExec($command)->run(); - verify($res->getMessage())->contains('src'); - verify($res->getMessage())->contains('codeception.yml'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/FilesystemStackCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/FilesystemStackCest.php deleted file mode 100644 index b9e68043..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/FilesystemStackCest.php +++ /dev/null @@ -1,50 +0,0 @@ -amInPath(codecept_data_dir().'sandbox'); - } - - public function toCreateDir(CliGuy $I) - { - $I->taskFilesystemStack() - ->mkdir('log') - ->touch('log/error.txt') - ->run(); - $I->seeFileFound('log/error.txt'); - } - - public function toDeleteFile(CliGuy $I) - { - $I->taskFilesystemStack() - ->stopOnFail() - ->remove('a.txt') - ->run(); - $I->dontSeeFileFound('a.txt'); - } - - public function toTestCrossVolumeRename(CliGuy $I) - { - $fsStack = $I->taskFilesystemStack() - ->mkdir('log') - ->touch('log/error.txt'); - $fsStack->run(); - - // We can't force _rename to run the cross-volume - // code path, so we will directly call the protected - // method crossVolumeRename to test to ensure it works. - // We will get a reference to it via reflection, set - // the reflected method object to public, and then - // call it via reflection. - $class = new ReflectionClass('\Robo\Task\Filesystem\FilesystemStack'); - $method = $class->getMethod('crossVolumeRename'); - $method->setAccessible(true); - $actualFsStackTask = $fsStack->getCollectionBuilderCurrentTask(); - $method->invokeArgs($actualFsStackTask, ['log', 'logfiles']); - - $I->dontSeeFileFound('log/error.txt'); - $I->seeFileFound('logfiles/error.txt'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirCept.php deleted file mode 100644 index fbb27a56..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirCept.php +++ /dev/null @@ -1,14 +0,0 @@ -wantTo('flatten dir with FlattenDir task'); -$I->amInPath(codecept_data_dir().'sandbox'); -$I->taskFlattenDir([ - 'some/deeply/nested/*.re' => 'flattened', - '*.txt' => 'flattened' - ]) - ->run(); -$I->seeDirFound('flattened'); -$I->seeFileFound('structu.re', 'flattened'); -$I->seeFileFound('a.txt', 'flattened'); -$I->seeFileFound('b.txt', 'flattened'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirParentsCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirParentsCept.php deleted file mode 100644 index d1d0504d..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirParentsCept.php +++ /dev/null @@ -1,12 +0,0 @@ -wantTo('flatten dir with FlattenDir task including parents'); -$I->amInPath(codecept_data_dir().'sandbox'); -$I->taskFlattenDir('some/deeply/nested/*.re') - ->includeParents(array(1,1)) - ->parentDir('some') - ->to('flattened') - ->run(); -$I->seeDirFound('flattened/deeply/nested'); -$I->seeFileFound('structu.re', 'flattened/deeply/nested'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/GenTaskCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/GenTaskCest.php deleted file mode 100644 index ce892874..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/GenTaskCest.php +++ /dev/null @@ -1,11 +0,0 @@ -taskGenTask('Symfony\Component\Filesystem\Filesystem', 'FilesystemStack')->run(); - verify($result->getMessage())->contains('protected function _chgrp($files, $group, $recursive = false)'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/GenerateMarkdownDocCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/GenerateMarkdownDocCest.php deleted file mode 100644 index de2b40e4..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/GenerateMarkdownDocCest.php +++ /dev/null @@ -1,86 +0,0 @@ -amInPath(codecept_data_dir().'sandbox'); - } - - public function toGenerateDocumentation(CliGuy $I) - { - $sourceFile = codecept_data_dir() . 'TestedRoboTask.php'; - $I->seeFileFound($sourceFile); - include $sourceFile; - $I->assertTrue(class_exists('TestedRoboTask')); - - $collection = $I->collectionBuilder(); - $taskGenerator = $collection->taskGenDoc("TestedRoboTask.md"); - $taskGenerator->filterClasses(function (\ReflectionClass $r) { - return !($r->isAbstract() || $r->isTrait()) && $r->implementsInterface('Robo\Contract\TaskInterface'); - })->prepend("# TestedRoboTask Tasks"); - $taskGenerator->docClass('TestedRoboTask'); - - $taskGenerator->filterMethods( - function (\ReflectionMethod $m) { - if ($m->isConstructor() || $m->isDestructor() || $m->isStatic()) { - return false; - } - $undocumentedMethods = - [ - '', - 'run', - '__call', - 'inflect', - 'injectDependencies', - 'getCommand', - 'getPrinted', - 'getConfig', - 'setConfig', - 'logger', - 'setLogger', - 'setProgressIndicator', - 'progressIndicatorSteps', - 'setBuilder', - 'getBuilder', - 'collectionBuilder', - ]; - return !in_array($m->name, $undocumentedMethods) && $m->isPublic(); // methods are not documented - } - )->processClassSignature( - function ($c) { - return "## " . preg_replace('~Task$~', '', $c->getShortName()) . "\n"; - } - )->processClassDocBlock( - function (\ReflectionClass $c, $doc) { - $doc = preg_replace('~@method .*?(.*?)\)~', '* `$1)` ', $doc); - $doc = str_replace('\\'.$c->name, '', $doc); - return $doc; - } - )->processMethodSignature( - function (\ReflectionMethod $m, $text) { - return str_replace('#### *public* ', '* `', $text) . '`'; - } - )->processMethodDocBlock( - function (\ReflectionMethod $m, $text) { - - return $text ? ' ' . trim(strtok($text, "\n"), "\n") : ''; - } - ); - - $collection->run(); - $I->seeFileFound('TestedRoboTask.md'); - - $contents = file_get_contents('TestedRoboTask.md'); - $I->assertContains('A test task file. Used for testig documentation generation.', $contents); - $I->assertContains('taskTestedRoboTask', $contents); - $I->assertContains('Set the destination file', $contents); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/PackExtractCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/PackExtractCept.php deleted file mode 100644 index a280c0cb..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/PackExtractCept.php +++ /dev/null @@ -1,57 +0,0 @@ -wantTo('archive directory and then extract it again with Archive and Extract tasks'); -$I->amInPath(codecept_data_dir().'sandbox'); -$I->seeDirFound('some/deeply/nested'); -$I->seeFileFound('structu.re', 'some/deeply/nested'); -$I->seeFileFound('existing_file', 'some/deeply'); - -// Test a bunch of archive types that we support -foreach (['zip', 'tar', 'tar.gz', 'tar.bz2', 'tgz'] as $archiveType) { - // First, take everything from the folder 'some/deeply' and make - // an archive for it located in 'deep' - $I->taskPack("deeply.$archiveType") - ->add(['deep' => 'some/deeply']) - ->run(); - $I->seeFileFound("deeply.$archiveType"); - // We are next going to extract the archive we created, this time - // putting it into a folder called "extracted-$archiveType" (different - // for each archive type we test). We rely on the default behavior - // of our extractor to remove the top-level directory in the archive - // ("deeply"). - $I->taskExtract("deeply.$archiveType") - ->to("extracted-$archiveType") - ->preserveTopDirectory(false) // this is the default - ->run(); - $I->seeDirFound("extracted-$archiveType"); - $I->seeDirFound("extracted-$archiveType/nested"); - $I->seeFileFound('structu.re', "extracted-$archiveType/nested"); - // Next, we'll extract the same archive again, this time preserving - // the top-level folder. - $I->taskExtract("deeply.$archiveType") - ->to("preserved-$archiveType") - ->preserveTopDirectory() - ->run(); - $I->seeDirFound("preserved-$archiveType"); - $I->seeDirFound("preserved-$archiveType/deep/nested"); - $I->seeFileFound('structu.re', "preserved-$archiveType/deep/nested"); - // Make another archive, this time composed of fanciful locations - $I->taskPack("composed.$archiveType") - ->add(['a/b/existing_file' => 'some/deeply/existing_file']) - ->add(['x/y/z/structu.re' => 'some/deeply/nested/structu.re']) - ->run(); - $I->seeFileFound("composed.$archiveType"); - // Extract our composed archive, and see if the resulting file - // structure matches expectations. - $I->taskExtract("composed.$archiveType") - ->to("decomposed-$archiveType") - ->preserveTopDirectory() - ->run(); - $I->seeDirFound("decomposed-$archiveType"); - $I->seeDirFound("decomposed-$archiveType/x/y/z"); - $I->seeFileFound('structu.re', "decomposed-$archiveType/x/y/z"); - $I->seeDirFound("decomposed-$archiveType/a/b"); - $I->seeFileFound('existing_file', "decomposed-$archiveType/a/b"); -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/ShortcutsCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/ShortcutsCest.php deleted file mode 100644 index addfb27c..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/ShortcutsCest.php +++ /dev/null @@ -1,25 +0,0 @@ -amInPath(codecept_data_dir('sandbox')); - } - - public function useTheCopyDirShortcut(CliGuy $I) - { - $I->wantTo('copy dir with _copyDir shortcut'); - $I->shortcutCopyDir('box', 'bin'); - $I->seeDirFound('bin'); - $I->seeFileFound('robo.txt', 'bin'); - } - - public function useTheMirrorDirShortcut(CliGuy $I) - { - $I->wantTo('mirror dir with _mirrorDir shortcut'); - $I->shortcutMirrorDir('box', 'bin'); - $I->seeDirFound('bin'); - $I->seeFileFound('robo.txt', 'bin'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/SimulatedCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/SimulatedCest.php deleted file mode 100644 index fde6cc79..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/SimulatedCest.php +++ /dev/null @@ -1,34 +0,0 @@ -amInPath(codecept_data_dir().'sandbox'); - } - - public function toSimulateDirCreation(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - $collection->simulated(true); - - // Set up a filesystem stack - $collection->taskFilesystemStack() - ->mkdir('simulatedir') - ->touch('simulatedir/error.txt'); - - // Run the task collection; now the files should be present - $collection->run(); - // Nothing should be created in simulated mode - $I->dontSeeFileFound('simulatedir/error.txt'); - $I->seeInOutput('[Simulator] Simulating Filesystem\FilesystemStack()'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/WriteFileCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/WriteFileCest.php deleted file mode 100644 index b9ede453..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/WriteFileCest.php +++ /dev/null @@ -1,111 +0,0 @@ -amInPath(codecept_data_dir('sandbox')); - } - - public function writeFewLines(CliGuy $I) - { - $I->wantTo('write lines with WriteToFile task'); - $I->taskWriteToFile('blogpost.md') - ->line('****') - ->line('hello world') - ->line('****') - ->run(); - $I->seeFileFound('blogpost.md'); - $I->seeFileContentsEqual(<<taskWriteToFile('a.txt') - ->append() - ->line('hello world') - ->run(); - $I->seeFileFound('a.txt'); - $I->seeFileContentsEqual(<<taskWriteToFile('a.txt') - ->append(); - $I->assertEquals(false, $writeTask->wouldChange(), "No changes to test file."); - $writeTask->line('hello world'); - $I->assertEquals(true, $writeTask->wouldChange(), "Test file would change."); - } - - public function insertFile(CliGuy $I) - { - $I->taskWriteToFile('a.txt') - ->line('****') - ->textFromFile('b.txt') - ->line("C") - ->run(); - $I->seeFileFound('a.txt'); - $I->seeFileContentsEqual(<<wantTo('append lines with WriteToFile task, but only if pattern does not match'); - $I->taskWriteToFile('blogpost.md') - ->line('****') - ->line('hello world') - ->line('****') - ->appendUnlessMatches('/hello/', 'Should not add this') - ->appendUnlessMatches('/goodbye/', 'Should add this') - ->appendIfMatches('/hello/', ' and should also add this') - ->appendIfMatches('/goodbye/', ' but should not add this') - ->appendIfMatches('/should/', '!') - ->run(); - $I->seeFileFound('blogpost.md'); - $I->seeFileContentsEqual(<<taskReplaceInFile('a.txt') - ->from('A') - ->to('B') - ->run(); - $I->seeFileFound('a.txt'); - $I->seeFileContentsEqual('B'); - - } - - public function replaceMultipleInFile(CliGuy $I) - { - $I->taskReplaceInFile('box/robo.txt') - ->from(array('HELLO', 'ROBO')) - ->to(array('Hello ', 'robo.li!')) - ->run(); - $I->seeFileFound('box/robo.txt'); - $I->seeFileContentsEqual('Hello robo.li!'); - } -} - diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/_bootstrap.php b/lib/composer/vendor/consolidation/robo/tests/cli/_bootstrap.php deleted file mode 100644 index c481d9b4..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/_bootstrap.php +++ /dev/null @@ -1,9 +0,0 @@ -say("The parameters passed are:\n" . var_export($a, true)); - } - - /** - * Demonstrate use of SymfonyStyle - */ - public function testSymfonyStyle() - { - $this->io()->title('My Title'); - $this->io()->section('Section 1'); - $this->io()->text('Some text in section one.'); - $this->io()->comment('This is just an example of different styles.'); - $this->io()->section('Section 2'); - $this->io()->text('Some text in section two.'); - } - - /** - * @hook command-event test:command-event - */ - public function hookCommandEvent() - { - $this->io()->text('This is the command-event hook for the test:command-event command.'); - } - - public function testCommandEvent() - { - $this->io()->text('This is the main method for the test:command-event command.'); - } - - /** - * @hook post-command test:command-event - */ - public function hookPostCommand() - { - $this->io()->text('This is the post-command hook for the test:command-event command.'); - } - - /** - * Demonstrate Robo error output and command failure. - */ - public function testError() - { - return $this->taskExec('ls xyzzy' . date('U'))->dir('/tmp')->run(); - } - - /** - * Demonstrate what happens when a command or a task - * throws an exception. Note that typically, Robo commands - * should return Result objects rather than throw exceptions. - */ - public function testException($options = ['task' => false]) - { - if (!$options['task']) { - throw new \RuntimeException('Command failed with an exception.'); - } - throw new \RuntimeException('Task failed with an exception.'); - } - - public function testStopOnFail() - { - $this->stopOnFail(); - $this->collectionBuilder() - ->taskExec('ls xyzzy' . date('U')) - ->dir('/tmp') - ->run(); - - // stopOnFail() should cause the failed task to throw an exception, - // so we should not get here, and instead exit the program with a - // non-zero status. - return 0; - } - - public function testVerbosity() - { - $this->output()->writeln('This command will print more information at higher verbosity levels.'); - $this->output()->writeln('Try running with -v, -vv or -vvv'); - $this->output()->writeln('The current verbosity level is ' . $this->output()->getVerbosity()); - $this->output()->writeln('This is a verbose message (-v).', OutputInterface::VERBOSITY_VERBOSE); - $this->output()->writeln('This is a very verbose message (-vv).', OutputInterface::VERBOSITY_VERY_VERBOSE); - $this->output()->writeln('This is a debug message (-vvv).', OutputInterface::VERBOSITY_DEBUG); - $this->logger->warning('This is a warning log message.'); - $this->logger->notice('This is a notice log message.'); - $this->logger->debug('This is a debug log message.'); - } - - public function testDeploy() - { - $gitTask = $this->taskGitStack() - ->pull(); - - $this->taskSshExec('mysite.com') - ->remoteDir('/var/www/somesite') - ->exec($gitTask) - ->run(); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/src/Traits/Common/CommandArgumentsHost.php b/lib/composer/vendor/consolidation/robo/tests/src/Traits/Common/CommandArgumentsHost.php deleted file mode 100644 index 363764dc..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/src/Traits/Common/CommandArgumentsHost.php +++ /dev/null @@ -1,18 +0,0 @@ -arguments; - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit.suite.yml b/lib/composer/vendor/consolidation/robo/tests/unit.suite.yml deleted file mode 100644 index bb94af02..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit.suite.yml +++ /dev/null @@ -1,8 +0,0 @@ -# Codeception Test Suite Configuration - -# suite for unit (internal) tests. -# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES. - -class_name: CodeGuy -modules: - enabled: [Asserts, CodeHelper] diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/ApplicationTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/ApplicationTest.php deleted file mode 100644 index bdb6c90a..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/ApplicationTest.php +++ /dev/null @@ -1,140 +0,0 @@ -app = $container->get('application'); - $config = $container->get('config'); - $this->commandFactory = $container->get('commandFactory'); - $this->roboCommandFileInstance = new TestedRoboFile; - $builder = $container->get('collectionBuilder', [$this->roboCommandFileInstance]); - $this->roboCommandFileInstance->setBuilder($builder); - $commandList = $this->commandFactory->createCommandsFromClass($this->roboCommandFileInstance); - foreach ($commandList as $command) { - $this->app->add($command); - } - } - - public function testTaskAccessor() - { - // Get a reference to the protected 'task' method, as - // this is normally only callable by methods of the - // commandfile instance. - $method = new ReflectionMethod($this->roboCommandFileInstance, 'task'); - $method->setAccessible(true); - $collectionBuilder = $method->invoke($this->roboCommandFileInstance, 'Robo\Task\Base\Exec', ['ls']); - verify(get_class($collectionBuilder))->equals('Robo\Collection\CollectionBuilder'); - $task = $collectionBuilder->getCollectionBuilderCurrentTask(); - verify(get_class($task))->equals('Robo\Task\Base\Exec'); - verify(get_class($task))->equals('Robo\Task\Base\Exec'); - } - - public function testAllowEmptyValuesAsDefaultsToOptionalOptions() - { - $command = $this->createCommand('hello'); - - $yell = $command->getDefinition()->getOption('yell'); - - verify($yell->isValueOptional()) - ->equals(false); - verify($yell->getDefault()) - ->equals(false); - - $to = $command->getDefinition()->getOption('to'); - - verify($to->isValueOptional()) - ->equals(true); - verify($to->getDefault()) - ->equals(null); - } - - public function testCommandDocumentation() - { - $command = $this->createCommand('fibonacci'); - - verify($command->getDescription()) - ->equals('Calculate the fibonacci sequence between two numbers.'); - } - - public function testCommandCompactDocumentation() - { - $command = $this->createCommand('compact'); - - verify($command->getDescription()) - ->equals('Compact doc comment'); - } - - public function testCommandArgumentDocumentation() - { - $command = $this->createCommand('fibonacci'); - - $start = $command->getDefinition()->getArgument('start'); - - verify($start->getDescription()) - ->equals('Number to start from'); - - $steps = $command->getDefinition()->getArgument('steps'); - - verify($steps->getDescription()) - ->equals('Number of steps to perform'); - } - - public function testCommandOptionDocumentation() - { - $command = $this->createCommand('fibonacci'); - - $graphic = $command->getDefinition()->getOption('graphic'); - - verify($graphic->getDescription()) - ->equals('Display the sequence graphically using cube representation'); - } - - public function testCommandHelpDocumentation() - { - $command = $this->createCommand('fibonacci'); - - verify($command->getHelp()) - ->contains('+----+---+'); - } - - public function testCommandNaming() - { - $this->assertNotNull($this->app->find('generate:user-avatar')); - } - - protected function createCommand($name) - { - $commandInfo = new CommandInfo($this->roboCommandFileInstance, $name); - return $this->commandFactory->createCommand($commandInfo, $this->roboCommandFileInstance); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Common/CommandArgumentsTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Common/CommandArgumentsTest.php deleted file mode 100644 index c30672f1..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Common/CommandArgumentsTest.php +++ /dev/null @@ -1,86 +0,0 @@ - [ - ' ', - [], - ], - 'empty string' => [ - " ''", - [''], - ], - 'space' => [ - " ' '", - [' '], - ], - 'no escape - a' => [ - " a", - ['a'], - ], - 'no escape - A' => [ - " A", - ['A'], - ], - 'no escape - 0' => [ - " 0", - ['0'], - ], - 'no escape - --' => [ - " --", - ['--'], - ], - 'no escape - @_~.' => [ - " @_~.", - ['@_~.'], - ], - '$' => [ - " 'a\$b'", - ['a$b'], - ], - '*' => [ - " 'a*b'", - ['a*b'], - ], - 'multi' => [ - " '' a '\$PATH'", - ['', 'a', '$PATH'], - ], - ]; - } - - /** - * @dataProvider casesArgs - * - * @covers ::args - * - * @param string $expected - * @param array $args - */ - public function testArgs($expected, $args) - { - $commandArguments = new CommandArgumentsHost(); - $commandArguments->args($args); - $this->guy->assertEquals($expected, $commandArguments->getArguments()); - - if ($args) { - $commandArguments = new CommandArgumentsHost(); - call_user_func_array([$commandArguments, 'args'], $args); - $this->guy->assertEquals($expected, $commandArguments->getArguments()); - } - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Common/ResourceExistenceChecker.php b/lib/composer/vendor/consolidation/robo/tests/unit/Common/ResourceExistenceChecker.php deleted file mode 100644 index e45f1df0..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Common/ResourceExistenceChecker.php +++ /dev/null @@ -1,80 +0,0 @@ -apigen = test::double('Robo\Task\ApiGen\ApiGen', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput() - ]); - if (!defined('DS')) { - define('DS', DIRECTORY_SEPARATOR); - } - $this->testDir = __DIR__ . '..' . DS . '..' . DS . 'data' . DS; - $this->testFile = $this->testDir . 'dump.sql'; - } - - /** - * testCheckResources - */ - public function testCheckResources() - { - $this->assertTrue($this->checkResources($this->testDir, 'dir')); - $this->assertTrue($this->checkResources([ - $this->testDir, - $this->testFile - ])); - } - - /** - * @expectException \InvalidArgumentException - */ - public function testCheckResourcesException() - { - $this->checkResources('does not exist', 'invalid type'); - } - - /** - * testCheckResource - */ - public function testCheckResource() - { - $this->assertTrue($this->checkResource($this->testDir, 'dir')); - $this->assertTrue($this->checkResource($this->testDir, 'fileAndDir')); - $this->assertTrue($this->checkResource($this->testFile, 'file')); - $this->assertTrue($this->checkResource($this->testFile, 'fileAndDir')); - - $this->assertFalse($this->checkResource('does-not-exist', 'dir')); - $this->assertFalse($this->checkResource('does-not-exist', 'fileAndDir')); - $this->assertFalse($this->checkResource('does-not-exist', 'file')); - $this->assertFalse($this->checkResource('does-not-exist', 'fileAndDir')); - } - - /** - * testIsDir - */ - public function testIsDir() - { - $this->assertTrue($this->isDir($this->testDir)); - $this->assertFalse($this->isDir('does-not-exist')); - } - - /** - * testIsFile - */ - public function testIsFile() - { - $this->assertTrue($this->isFile($this->testFile)); - $this->assertFalse($this->isFile($this->testDir . 'does-not-exist')); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/ConfigurationTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/ConfigurationTest.php deleted file mode 100644 index 7c29ea4f..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/ConfigurationTest.php +++ /dev/null @@ -1,40 +0,0 @@ -setConfig(Robo::config()); - verify($taskA->run())->equals('value-a'); - - $taskB = new ConfigurationTestTaskB(); - $taskB->setConfig(Robo::config()); - verify($taskB->run())->equals('value-b'); - } - -} - -class ConfigurationTestTaskA extends BaseTask -{ - public function run() - { - return $this->getConfigValue('key'); - } -} - -class ConfigurationTestTaskB extends BaseTask -{ - public function run() - { - return $this->getConfigValue('key'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/OutputTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/OutputTest.php deleted file mode 100644 index 0e1468d6..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/OutputTest.php +++ /dev/null @@ -1,81 +0,0 @@ -dialog = new Symfony\Component\Console\Helper\QuestionHelper; - $this->setOutput(Robo::service('output')); - } - - public function testSay() - { - $this->say('Hello, world!'); - $this->guy->seeInOutput('> Hello, world!'); - } - - public function testAskReply() - { - $this->expectedAnswer = 'jon'; - verify($this->ask('What is your name?'))->equals('jon'); - $this->guy->seeOutputEquals('? What is your name? '); - } - public function testAskMethod() - { - if (method_exists($this, 'createMock')) { - $this->dialog = $this->createMock('\Symfony\Component\Console\Helper\QuestionHelper', ['ask']); - } else { - $this->dialog = $this->getMock('\Symfony\Component\Console\Helper\QuestionHelper', ['ask']); - } - $this->dialog->expects($this->once()) - ->method('ask'); - $this->ask('What is your name?'); - } - public function testAskHiddenMethod() - { - if (method_exists($this, 'createMock')) { - $this->dialog = $this->createMock('\Symfony\Component\Console\Helper\QuestionHelper', ['ask']); - } else { - $this->dialog = $this->getMock('\Symfony\Component\Console\Helper\QuestionHelper', ['ask']); - } - $this->dialog->expects($this->once()) - ->method('ask'); - $this->ask('What is your name?', true); - } - public function testYell() - { - $this->yell('Buuuu!'); - $this->guy->seeInOutput('Buuuu!'); - } - protected function getDialog() - { - $stream = fopen('php://memory', 'r+', false); - fputs($stream, $this->expectedAnswer); - rewind($stream); - $this->dialog->setInputStream($stream); - return $this->dialog; - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/ResultTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/ResultTest.php deleted file mode 100644 index 02fc322e..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/ResultTest.php +++ /dev/null @@ -1,79 +0,0 @@ - 10]); - - $this->guy->seeInOutput('The foo barred'); - $this->guy->seeInOutput('Exit code 1'); - $this->guy->seeInOutput('10s'); - $this->guy->seeInOutput('[ResultDummyTask]'); - - $this->assertSame($task, $result->getTask()); - $this->assertEquals(1, $result->getExitCode()); - $this->assertEquals('The foo barred', $result->getMessage()); - $data = $result->getData(); - $this->assertEquals(10, $data['time']); - - $taskClone = $result->cloneTask(); - $this->assertNotSame($task, $taskClone); - $this->assertInstanceOf('Robo\Contract\TaskInterface', $taskClone); - } - - public function testArrayAccess() - { - $task = new ResultDummyTask(); - $result = new Result($task, 1, 'The foo barred', ['time' => 10]); - $this->assertEquals($result['time'], 10); - } - - public function testStopOnFail() - { - $exceptionClass = false; - $task = new ResultDummyTask(); - - Result::$stopOnFail = true; - $result = Result::success($task, "Something that worked"); - try { - $result = Result::error($task, "Something that did not work"); - // stopOnFail will cause Result::error() to throw an exception, - // so we will never get here. If we did, the assert below would fail. - $this->assertTrue($result->wasSuccessful()); - $this->assertTrue(false); - } catch (\Exception $e) { - $exceptionClass = get_class($e); - } - $this->assertEquals(TaskExitException::class, $exceptionClass); - $this->assertTrue($result->wasSuccessful()); - - /* - // This gives an error: - // Exception of class Robo\Exception\TaskExitException expected to - // be thrown, but PHPUnit_Framework_Exception caught - // This happens whether or not the expected exception is thrown - $this->guy->expectException(TaskExitException::class, function() { - // $result = Result::error($task, "Something that did not work"); - $result = Result::success($task, "Something that worked"); - }); - */ - - Result::$stopOnFail = false; - } -} - -class ResultDummyTask implements \Robo\Contract\TaskInterface -{ - public function run() - { - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/RunnerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/RunnerTest.php deleted file mode 100644 index 9a871c93..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/RunnerTest.php +++ /dev/null @@ -1,279 +0,0 @@ -runner = new \Robo\Runner('\Robo\RoboFileFixture'); - } - - public function testHandleError() - { - $tmpLevel = error_reporting(); - - $this->assertFalse($this->runner->handleError()); - error_reporting(0); - $this->assertTrue($this->runner->handleError()); - - error_reporting($tmpLevel); - } - - public function testErrorIsHandled() - { - $tmpLevel = error_reporting(); - - // Set error_get_last to a known state. Note that it can never be - // reset; see http://php.net/manual/en/function.error-get-last.php - @trigger_error('control'); - $error_description = error_get_last(); - $this->assertEquals('control', $error_description['message']); - @trigger_error(''); - $error_description = error_get_last(); - $this->assertEquals('', $error_description['message']); - - // Set error_reporting to a non-zero value. In this instance, - // 'trigger_error' would abort our test script, so we use - // @trigger_error so that execution will continue. With our - // error handler in place, the value of error_get_last() does - // not change. - error_reporting(E_USER_ERROR); - set_error_handler(array($this->runner, 'handleError')); - @trigger_error('test error', E_USER_ERROR); - $error_description = error_get_last(); - $this->assertEquals('', $error_description['message']); - - // Set error_reporting to zero. Now, even 'trigger_error' - // does not abort execution. The value of error_get_last() - // still does not change. - error_reporting(0); - trigger_error('test error 2', E_USER_ERROR); - $error_description = error_get_last(); - $this->assertEquals('', $error_description['message']); - - error_reporting($tmpLevel); - } - - public function testThrowsExceptionWhenNoContainerAvailable() - { - \PHPUnit_Framework_TestCase::setExpectedExceptionRegExp( - '\RuntimeException', - '/container is not initialized yet.*/' - ); - Robo::unsetContainer(); - Robo::getContainer(); - } - - public function testRunnerNoSuchCommand() - { - $argv = ['placeholder', 'no-such-command']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('Command "no-such-command" is not defined.'); - } - - public function testRunnerList() - { - $argv = ['placeholder', 'list']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('test:array-args'); - } - - public function testRunnerTryArgs() - { - $argv = ['placeholder', 'test:array-args', 'a', 'b', 'c']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $expected = << The parameters passed are: -array ( - 0 => 'a', - 1 => 'b', - 2 => 'c', -) - -EOT; - $this->guy->seeOutputEquals($expected); - } - - public function testSymfonyStyle() - { - $argv = ['placeholder', 'test:symfony-style']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('Some text in section one.'); - } - - public function testCommandEventHook() - { - $argv = ['placeholder', 'test:command-event']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $expected = <<guy->seeInOutput($expected); - } - - public function testRoboStaticRunMethod() - { - $argv = ['placeholder', 'test:symfony-style']; - $commandFiles = ['\Robo\RoboFileFixture']; - Robo::run($argv, $commandFiles, 'MyApp', '1.2.3', $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('Some text in section one.'); - } - - public function testDeploy() - { - $argv = ['placeholder', 'test:deploy', '--simulate']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('[Simulator] Simulating Remote\\Ssh(\'mysite.com\', null)'); - $this->guy->seeInOutput('[Simulator] Running ssh mysite.com \'cd "/var/www/somesite" && git pull\''); - } - - public function testRunnerTryError() - { - $argv = ['placeholder', 'test:error']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('[Exec] Running ls xyzzy'); - $this->assertTrue($result > 0); - } - - public function testRunnerTrySimulatedError() - { - $argv = ['placeholder', 'test:error', '--simulate']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('Simulating Exec'); - $this->assertEquals(0, $result); - } - - public function testRunnerTryException() - { - $argv = ['placeholder', 'test:exception', '--task']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('Task failed with an exception'); - $this->assertEquals(1, $result); - } - - public function testInitCommand() - { - $container = \Robo\Robo::getContainer(); - $app = $container->get('application'); - $app->addInitRoboFileCommand(getcwd() . '/testRoboFile.php', 'RoboTestClass'); - - $argv = ['placeholder', 'init']; - $status = $this->runner->run($argv, $this->guy->capturedOutputStream(), $app); - $this->guy->seeInOutput('testRoboFile.php will be created in the current directory'); - $this->assertEquals(0, $status); - - $this->assertTrue(file_exists('testRoboFile.php')); - $commandContents = file_get_contents('testRoboFile.php'); - unlink('testRoboFile.php'); - $this->assertContains('class RoboTestClass', $commandContents); - } - - public function testTasksStopOnFail() - { - $argv = ['placeholder', 'test:stop-on-fail']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('['); - $this->assertTrue($result > 0); - } - - public function testInvalidRoboDirectory() - { - $runnerWithNoRoboFile = new \Robo\Runner(); - - $argv = ['placeholder', 'list', '-f', 'no-such-directory']; - $result = $runnerWithNoRoboFile->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('Path `no-such-directory` is invalid; please provide a valid absolute path to the Robofile to load.'); - } - - public function testUnloadableRoboFile() - { - $runnerWithNoRoboFile = new \Robo\Runner(); - - $argv = ['placeholder', 'list', '-f', dirname(__DIR__) . '/src/RoboFileFixture.php']; - $result = $runnerWithNoRoboFile->execute($argv, null, null, $this->guy->capturedOutputStream()); - - // We cannot load RoboFileFixture.php via -f / --load-from because - // it has a namespace, and --load-from does not support that. - $this->guy->seeInOutput('Class RoboFileFixture was not loaded'); - } - - public function testRunnerQuietOutput() - { - $argv = ['placeholder', 'test:verbosity', '--quiet']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->doNotSeeInOutput('This command will print more information at higher verbosity levels'); - $this->guy->doNotSeeInOutput('This is a verbose message (-v).'); - $this->guy->doNotSeeInOutput('This is a very verbose message (-vv).'); - $this->guy->doNotSeeInOutput('This is a debug message (-vvv).'); - $this->guy->doNotSeeInOutput(' [warning] This is a warning log message.'); - $this->guy->doNotSeeInOutput(' [notice] This is a notice log message.'); - $this->guy->doNotSeeInOutput(' [debug] This is a debug log message.'); - $this->assertEquals(0, $result); - } - - public function testRunnerVerboseOutput() - { - $argv = ['placeholder', 'test:verbosity', '-v']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('This command will print more information at higher verbosity levels'); - $this->guy->seeInOutput('This is a verbose message (-v).'); - $this->guy->doNotSeeInOutput('This is a very verbose message (-vv).'); - $this->guy->doNotSeeInOutput('This is a debug message (-vvv).'); - $this->guy->seeInOutput(' [warning] This is a warning log message.'); - $this->guy->seeInOutput(' [notice] This is a notice log message.'); - $this->guy->doNotSeeInOutput(' [debug] This is a debug log message.'); - $this->assertEquals(0, $result); - } - - public function testRunnerVeryVerboseOutput() - { - $argv = ['placeholder', 'test:verbosity', '-vv']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('This command will print more information at higher verbosity levels'); - $this->guy->seeInOutput('This is a verbose message (-v).'); - $this->guy->seeInOutput('This is a very verbose message (-vv).'); - $this->guy->doNotSeeInOutput('This is a debug message (-vvv).'); - $this->guy->seeInOutput(' [warning] This is a warning log message.'); - $this->guy->seeInOutput(' [notice] This is a notice log message.'); - $this->guy->doNotSeeInOutput(' [debug] This is a debug log message.'); - $this->assertEquals(0, $result); - } - - public function testRunnerDebugOutput() - { - $argv = ['placeholder', 'test:verbosity', '-vvv']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('This command will print more information at higher verbosity levels'); - $this->guy->seeInOutput('This is a verbose message (-v).'); - $this->guy->seeInOutput('This is a very verbose message (-vv).'); - $this->guy->seeInOutput('This is a debug message (-vvv).'); - $this->guy->seeInOutput(' [warning] This is a warning log message.'); - $this->guy->seeInOutput(' [notice] This is a notice log message.'); - $this->guy->seeInOutput(' [debug] This is a debug log message.'); - $this->assertEquals(0, $result); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ApiGenTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/ApiGenTest.php deleted file mode 100644 index cc21850e..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ApiGenTest.php +++ /dev/null @@ -1,52 +0,0 @@ -apigen = test::double('Robo\Task\ApiGen\ApiGen', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - - $this->container = Robo::getContainer(); - } - - // tests - public function testPHPUnitCommand() - { - // need an explicit Traversable - $skippedPaths = new \SplDoublyLinkedList(); - $skippedPaths->push('a'); - $skippedPaths->push('b'); - - // going for 'bang for the buck' here re: test converage - $task = (new \Robo\Task\ApiGen\ApiGen('apigen')) - ->config('./apigen.neon') - ->source('src') // single string value of Traversable - ->extensions('php') // single string value of List - ->exclude(array('test', 'tmp')) // array value of Traversable - ->skipDocPath($skippedPaths) // multi-value of Traversable - ->charset(array('utf8','iso88591')) // array of List - ->internal('no') // boolean as supported "no" - ->php(true) // boolean as boolean - ->tree('Y') // boolean as string - ->debug('n'); - - $cmd = 'apigen --config ./apigen.neon --source src --extensions php --exclude test --exclude tmp --skip-doc-path a --skip-doc-path b --charset \'utf8,iso88591\' --internal no --php yes --tree yes --debug no'; - verify($task->getCommand())->equals($cmd); - - $task->run(); - $this->apigen->verifyInvoked('executeCommand', [$cmd]); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/AtoumTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/AtoumTest.php deleted file mode 100644 index 0bd71a34..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/AtoumTest.php +++ /dev/null @@ -1,38 +0,0 @@ -atoum = test::double('Robo\Task\Testing\Atoum', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - public function testAtoumCommand() - { - $task = (new \Robo\Task\Testing\Atoum('atoum')) - ->bootstrap('bootstrap.php') - ->tags("needDb") - ->lightReport() - ->tap() - ->bootstrap('tests/bootstrap.php') - ->configFile("config/dev.php") - ->debug() - ->files(array("path/to/file1.php", "path/to/file2.php")) - ->directories("tests/units") - ; - verify($task->getCommand())->equals('atoum --bootstrap bootstrap.php --tags needDb --use-light-report --use-tap-report --bootstrap tests/bootstrap.php -c config/dev.php --debug --f path/to/file1.php --f path/to/file2.php --directories tests/units'); - $task->run(); - $this->atoum->verifyInvoked('executeCommand', ['atoum --bootstrap bootstrap.php --tags needDb --use-light-report --use-tap-report --bootstrap tests/bootstrap.php -c config/dev.php --debug --f path/to/file1.php --f path/to/file2.php --directories tests/units']); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/BehatTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/BehatTest.php deleted file mode 100644 index d08e1570..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/BehatTest.php +++ /dev/null @@ -1,43 +0,0 @@ -behat = test::double('Robo\Task\Testing\Behat', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testBehatRun() - { - $behat = test::double('Robo\Task\Testing\Behat', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Testing\Behat('behat'))->run(); - $behat->verifyInvoked('executeCommand'); - } - - public function testBehatCommand() - { - $behat = test::double('Robo\Task\Testing\Behat', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - $task = (new \Robo\Task\Testing\Behat('behat')) - ->stopOnFail() - ->noInteraction() - ->colors(); - verify($task->getCommand())->equals('behat run --stop-on-failure --no-interaction --colors'); - $task->run(); - $behat->verifyInvoked('executeCommand', ['behat run --stop-on-failure --no-interaction --colors']); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/BowerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/BowerTest.php deleted file mode 100644 index f656d753..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/BowerTest.php +++ /dev/null @@ -1,59 +0,0 @@ -baseBower = test::double('Robo\Task\Bower\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - // tests - public function testBowerInstall() - { - $bower = test::double('Robo\Task\Bower\Install', ['executeCommand' => null, 'logger' => new \Psr\Log\NullLogger(),]); - (new \Robo\Task\Bower\Install('bower'))->run(); - $bower->verifyInvoked('executeCommand', ['bower install']); - } - - public function testBowerUpdate() - { - $bower = test::double('Robo\Task\Bower\Update', ['executeCommand' => null]); - $task = new \Robo\Task\Bower\Update('bower'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task->run(); - $bower->verifyInvoked('executeCommand', ['bower update']); - } - - public function testBowerInstallCommand() - { - verify( - (new \Robo\Task\Bower\Install('bower'))->getCommand() - )->equals('bower install'); - - verify( - (new \Robo\Task\Bower\Update('bower'))->getCommand() - )->equals('bower update'); - - verify( - (new \Robo\Task\Bower\Install('bower')) - ->allowRoot() - ->forceLatest() - ->offline() - ->noDev() - ->getCommand() - )->equals('bower install --allow-root --force-latest --offline --production'); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CodeceptionTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/CodeceptionTest.php deleted file mode 100644 index d2c637b0..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CodeceptionTest.php +++ /dev/null @@ -1,63 +0,0 @@ -codecept = test::double('Robo\Task\Testing\Codecept', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput() - ]); - } - - // tests - public function testCodeceptionCommand() - { - verify(trim((new \Robo\Task\Testing\Codecept('codecept.phar'))->getCommand()))->equals('codecept.phar run'); - } - - public function testCodeceptionRun() - { - $task = new \Robo\Task\Testing\Codecept('codecept.phar'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task->run(); - $this->codecept->verifyInvoked('executeCommand'); - } - - public function testCodeceptOptions() - { - verify((new \Robo\Task\Testing\Codecept('codecept')) - ->suite('unit') - ->test('Codeception/Command') - ->group('core') - ->env('process1') - ->coverage() - ->getCommand() - )->equals('codecept run --group core --env process1 --coverage unit Codeception/Command'); - - verify((new \Robo\Task\Testing\Codecept('codecept')) - ->test('tests/unit/Codeception') - ->configFile('~/Codeception') - ->xml('result.xml') - ->html() - ->getCommand() - )->equals('codecept run -c ~/Codeception --xml result.xml --html tests/unit/Codeception'); - - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->debug()->getCommand())->contains(' --debug'); - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->silent()->getCommand())->contains(' --silent'); - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->excludeGroup('g')->getCommand())->contains(' --skip-group g'); - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->tap()->getCommand())->contains('--tap'); - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->json()->getCommand())->contains('--json'); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CollectionTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/CollectionTest.php deleted file mode 100644 index 843589a9..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CollectionTest.php +++ /dev/null @@ -1,183 +0,0 @@ -add($taskA, 'a-name') - ->add($taskB, 'b-name'); - - // We add methods of our task instances as before and - // after tasks. These methods have access to the task - // class' fields, and may modify them as needed. - $collection - ->after('a-name', [$taskA, 'parenthesizer']) - ->after('a-name', [$taskA, 'emphasizer']) - ->after('b-name', [$taskB, 'emphasizer']) - ->after('b-name', [$taskB, 'parenthesizer']) - ->after('b-name', [$taskB, 'parenthesizer'], 'special-name'); - - $result = $collection->run(); - - // verify(var_export($result->getData(), true))->equals(''); - - // Ensure that the results have the correct key values - verify(implode(',', array_keys($result->getData())))->equals('a-name,b-name,special-name,time'); - - // Verify that all of the after tasks ran in - // the correct order. - verify($result['a-name']['a'])->equals('*(value-a)*'); - verify($result['b-name']['b'])->equals('(*value-b*)'); - - // Note that the last after task is added with a special name; - // its results therefore show up under the name given, rather - // than being stored under the name of the task it was added after. - verify($result['special-name']['b'])->equals('((*value-b*))'); - } - - public function testBeforeFilters() - { - $collection = new Collection(); - - $taskA = new CollectionTestTask('a', 'value-a'); - $taskB = new CollectionTestTask('b', 'value-b'); - - $collection - ->add($taskA, 'a-name') - ->add($taskB, 'b-name'); - - // We add methods of our task instances as before and - // after tasks. These methods have access to the task - // class' fields, and may modify them as needed. - $collection - ->before('b-name', [$taskA, 'parenthesizer']) - ->before('b-name', [$taskA, 'emphasizer'], 'special-before-name'); - - $result = $collection->run(); - - // Ensure that the results have the correct key values - verify(implode(',', array_keys($result->getData())))->equals('a-name,b-name,special-before-name,time'); - - // The result from the 'before' task is attached - // to 'b-name', since it was called as before('b-name', ...) - verify($result['b-name']['a'])->equals('(value-a)'); - // When a 'before' task is given its own name, then - // its results are attached under that name. - verify($result['special-before-name']['a'])->equals('*(value-a)*'); - } - - public function testAddCodeRollbackAndCompletion() - { - $collection = new Collection(); - $rollback1 = new CountingTask(); - $rollback2 = new CountingTask(); - $completion1 = new CountingTask(); - $completion2 = new CountingTask(); - - $collection - ->progressMessage("start collection tasks") - ->rollback($rollback1) - ->completion($completion1) - ->rollbackCode(function() use($rollback1) { $rollback1->run(); } ) - ->completionCode(function() use($completion1) { $completion1->run(); } ) - ->addCode(function () { return 42; }) - ->progressMessage("not reached") - ->rollback($rollback2) - ->completion($completion2) - ->addCode(function () { return 13; }); - - $collection->setLogger($this->guy->logger()); - - $result = $collection->run(); - // Execution stops on the first error. - // Confirm that status code is converted to a Result object. - verify($result->getExitCode())->equals(42); - verify($rollback1->getCount())->equals(2); - verify($rollback2->getCount())->equals(0); - verify($completion1->getCount())->equals(2); - verify($completion2->getCount())->equals(0); - $this->guy->seeInOutput('start collection tasks'); - $this->guy->doNotSeeInOutput('not reached'); - } -} - -class CountingTask extends BaseTask -{ - protected $count = 0; - - public function run() - { - $this->count++; - return Result::success($this); - } - - public function getCount() - { - return $this->count; - } -} - -class CollectionTestTask extends BaseTask -{ - protected $key; - protected $value; - - public function __construct($key, $value) - { - $this->key = $key; - $this->value = $value; - } - - public function run() - { - return $this->getValue(); - } - - protected function getValue() - { - $result = Result::success($this); - $result[$this->key] = $this->value; - - return $result; - } - - // Note that by returning a value with the same - // key as the result, we overwrite the value generated - // by the primary task method ('run()'). If we returned - // a result with a different key, then both values - // would appear in the result. - public function parenthesizer() - { - $this->value = "({$this->value})"; - return $this->getValue(); - } - - public function emphasizer() - { - $this->value = "*{$this->value}*"; - return $this->getValue(); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CommandStackTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/CommandStackTest.php deleted file mode 100644 index 7a83b5f7..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CommandStackTest.php +++ /dev/null @@ -1,26 +0,0 @@ -executable('some-executable') - ->exec('some-executable status') - ->getCommand() - )->equals('some-executable status'); - } - - public function testExecStackCommandIsNotTrimmedIfHavingSameCharsAsExecutable() - { - $commandStack = Stub::make('Robo\Task\CommandStack'); - verify($commandStack - ->executable('some-executable') - ->exec('status') - ->getCommand() - )->equals('some-executable status'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ComposerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/ComposerTest.php deleted file mode 100644 index 4e01fb89..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ComposerTest.php +++ /dev/null @@ -1,266 +0,0 @@ -baseComposer = test::double('Robo\Task\Composer\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - // tests - public function testComposerInstall() - { - $composer = test::double('Robo\Task\Composer\Install', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\Install('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer install']); - - (new \Robo\Task\Composer\Install('composer')) - ->preferSource() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer install --prefer-source']); - - (new \Robo\Task\Composer\Install('composer')) - ->optimizeAutoloader() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer install --optimize-autoloader']); - } - - public function testComposerInstallAnsi() - { - $config = new \Robo\Config(); - $config->setDecorated(true); - $composer = test::double('Robo\Task\Composer\Install', ['executeCommand' => null, 'getConfig' => $config, 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\Install('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer install --ansi']); - - (new \Robo\Task\Composer\Install('composer')) - ->preferSource() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer install --prefer-source --ansi']); - - (new \Robo\Task\Composer\Install('composer')) - ->optimizeAutoloader() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer install --optimize-autoloader --ansi']); - } - - public function testComposerUpdate() - { - $composer = test::double('Robo\Task\Composer\Update', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\Update('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer update']); - - (new \Robo\Task\Composer\Update('composer')) - ->optimizeAutoloader() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer update --optimize-autoloader']); - } - - public function testComposerDumpAutoload() - { - $composer = test::double('Robo\Task\Composer\DumpAutoload', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\DumpAutoload('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer dump-autoload']); - - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->noDev() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer dump-autoload --no-dev']); - - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->optimize() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer dump-autoload --optimize']); - - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->optimize() - ->noDev() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer dump-autoload --optimize --no-dev']); - } - - public function testComposerValidate() - { - $composer = test::double('Robo\Task\Composer\Validate', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\Validate('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer validate']); - - (new \Robo\Task\Composer\Validate('composer')) - ->noCheckAll() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --no-check-all']); - - (new \Robo\Task\Composer\Validate('composer')) - ->noCheckLock() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --no-check-lock']); - - (new \Robo\Task\Composer\Validate('composer')) - ->noCheckPublish() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --no-check-publish']); - - (new \Robo\Task\Composer\Validate('composer')) - ->withDependencies() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --with-dependencies']); - - (new \Robo\Task\Composer\Validate('composer')) - ->strict() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --strict']); - } - - public function testComposerInstallCommand() - { - verify( - (new \Robo\Task\Composer\Install('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer install'); - - verify( - (new \Robo\Task\Composer\Install('composer')) - ->setConfig(new \Robo\Config()) - ->noDev() - ->preferDist() - ->optimizeAutoloader() - ->getCommand() - )->equals('composer install --prefer-dist --no-dev --optimize-autoloader'); - } - - public function testComposerUpdateCommand() - { - verify( - (new \Robo\Task\Composer\Update('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer update'); - - verify( - (new \Robo\Task\Composer\Update('composer')) - ->setConfig(new \Robo\Config()) - ->noDev() - ->preferDist() - ->getCommand() - )->equals('composer update --prefer-dist --no-dev'); - - verify( - (new \Robo\Task\Composer\Update('composer')) - ->setConfig(new \Robo\Config()) - ->noDev() - ->preferDist() - ->optimizeAutoloader() - ->getCommand() - )->equals('composer update --prefer-dist --no-dev --optimize-autoloader'); - } - - public function testComposerDumpAutoloadCommand() - { - verify( - (new \Robo\Task\Composer\DumpAutoload('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer dump-autoload'); - - verify( - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->setConfig(new \Robo\Config()) - ->noDev() - ->getCommand() - )->equals('composer dump-autoload --no-dev'); - - verify( - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->setConfig(new \Robo\Config()) - ->optimize() - ->getCommand() - )->equals('composer dump-autoload --optimize'); - - verify( - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->setConfig(new \Robo\Config()) - ->optimize() - ->noDev() - ->getCommand() - )->equals('composer dump-autoload --optimize --no-dev'); - } - - public function testComposerRemove() - { - verify( - (new \Robo\Task\Composer\Remove('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer remove'); - verify( - (new \Robo\Task\Composer\Remove('composer')) - ->setConfig(new \Robo\Config()) - ->dev() - ->noProgress() - ->noUpdate() - ->getCommand() - )->equals('composer remove --dev --no-progress --no-update'); - } - - public function testComposerValidateCommand() - { - verify( - (new \Robo\Task\Composer\Validate('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer validate'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->noCheckAll() - ->getCommand() - )->equals('composer validate --no-check-all'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->noCheckLock() - ->getCommand() - )->equals('composer validate --no-check-lock'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->noCheckPublish() - ->getCommand() - )->equals('composer validate --no-check-publish'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->withDependencies() - ->getCommand() - )->equals('composer validate --with-dependencies'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->strict() - ->getCommand() - )->equals('composer validate --strict'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->noCheckAll() - ->noCheckLock() - ->noCheckPublish() - ->withDependencies() - ->strict() - ->getCommand() - )->equals('composer validate --no-check-all --no-check-lock --no-check-publish --with-dependencies --strict'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/DockerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/DockerTest.php deleted file mode 100644 index f72b237f..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/DockerTest.php +++ /dev/null @@ -1,97 +0,0 @@ -baseDocker = test::double('Robo\Task\Docker\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - // tests - public function testDockerBuild() - { - $docker = test::double('Robo\Task\Docker\Build', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Build())->run(); - $docker->verifyInvoked('executeCommand', ['docker build .']); - - (new \Robo\Task\Docker\Build())->tag('something')->run(); - $docker->verifyInvoked('executeCommand', ['docker build -t something .']); - } - - public function testDockerCommit() - { - $docker = test::double('Robo\Task\Docker\Commit', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Commit('cid'))->run(); - $docker->verifyInvoked('executeCommand', ['docker commit cid ']); - - (new \Robo\Task\Docker\Commit('cid'))->name('somename')->run(); - $docker->verifyInvoked('executeCommand', ['docker commit cid somename ']); - } - - public function testDockerExec() - { - $docker = test::double('Robo\Task\Docker\Exec', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Exec('cid'))->run(); - $docker->verifyInvoked('executeCommand', ['docker exec cid ']); - - (new \Robo\Task\Docker\Exec('cid'))->exec('pwd')->run(); - $docker->verifyInvoked('executeCommand', ['docker exec cid pwd']); - } - - public function testDockerPull() - { - $docker = test::double('Robo\Task\Docker\Pull', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Pull('image'))->run(); - $docker->verifyInvoked('executeCommand', ['docker pull image ']); - } - - public function testDockerRemove() - { - $docker = test::double('Robo\Task\Docker\Remove', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Remove('container'))->run(); - $docker->verifyInvoked('executeCommand', ['docker rm container ']); - } - - public function testDockerRun() - { - $docker = test::double('Robo\Task\Docker\Run', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger(), 'getUniqId' => '12345']); - - (new \Robo\Task\Docker\Run('cid'))->tmpDir('/tmp')->run(); - $docker->verifyInvoked('executeCommand', ['docker run -i --cidfile /tmp/docker_12345.cid cid']); - - (new \Robo\Task\Docker\Run('cid'))->tmpDir('/tmp')->exec('pwd')->run(); - $docker->verifyInvoked('executeCommand', ['docker run -i --cidfile /tmp/docker_12345.cid cid pwd']); - } - - public function testDockerStart() - { - $docker = test::double('Robo\Task\Docker\Start', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Start('cid'))->run(); - $docker->verifyInvoked('executeCommand', ['docker start cid']); - } - - public function testDockerStop() - { - $docker = test::double('Robo\Task\Docker\Stop', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Stop('cid'))->run(); - $docker->verifyInvoked('executeCommand', ['docker stop cid']); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ExecTaskTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/ExecTaskTest.php deleted file mode 100644 index 15b3c224..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ExecTaskTest.php +++ /dev/null @@ -1,73 +0,0 @@ -process = test::double('Symfony\Component\Process\Process', [ - 'run' => false, - 'start' => false, - 'getOutput' => 'Hello world', - 'getExitCode' => 0, - 'logger' => new \Psr\Log\NullLogger(), - ]); - test::double('Robo\Task\Base\Exec', ['output' => new \Symfony\Component\Console\Output\NullOutput()]); - } - - public function testExec() - { - $task = new \Robo\Task\Base\Exec('ls'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $result = $task->run(); - $this->process->verifyInvoked('run'); - verify($result->getMessage())->equals('Hello world'); - verify($result->getExitCode())->equals(0); - } - - public function testExecInBackground() - { - $task = new \Robo\Task\Base\Exec('ls'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $result = $task->background()->run(); - $this->process->verifyInvoked('start'); - $this->process->verifyNeverInvoked('run'); - verify('exit code was not received', $result->getExitCode())->notEquals(100); - } - - public function testGetCommand() - { - verify((new \Robo\Task\Base\Exec('ls'))->getCommand())->equals('ls'); - } - - public function testExecStack() - { - $task = new \Robo\Task\Base\ExecStack(); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task - ->exec('ls') - ->exec('cd /') - ->exec('cd home') - ->run(); - $this->process->verifyInvoked('run', 3); - } - - public function testExecStackCommand() - { - verify((new \Robo\Task\Base\ExecStack()) - ->exec('ls') - ->exec('cd /') - ->exec('cd home') - ->getCommand() - )->equals('ls && cd / && cd home'); - } -}; diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/GitTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/GitTest.php deleted file mode 100644 index 63b463b6..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/GitTest.php +++ /dev/null @@ -1,62 +0,0 @@ -git = test::double('Robo\Task\Vcs\GitStack', [ - 'executeCommand' => new \AspectMock\Proxy\Anything(), - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testGitStackRun() - { - (new \Robo\Task\Vcs\GitStack('git'))->stopOnFail()->add('-A')->pull()->run(); - $this->git->verifyInvoked('executeCommand', ['git add -A']); - $this->git->verifyInvoked('executeCommand', ['git pull']); - - (new \Robo\Task\Vcs\GitStack('git'))->add('-A')->pull()->run(); - $this->git->verifyInvoked('executeCommand', ['git add -A && git pull']); - } - - public function testGitStackCommands() - { - verify( - (new \Robo\Task\Vcs\GitStack()) - ->cloneRepo('http://github.com/consolidation-org/Robo') - ->pull() - ->add('-A') - ->commit('changed') - ->push() - ->tag('0.6.0') - ->push('origin', '0.6.0') - ->getCommand() - )->equals("git clone http://github.com/consolidation-org/Robo && git pull && git add -A && git commit -m 'changed' && git push && git tag 0.6.0 && git push origin 0.6.0"); - } - - public function testGitStackCommandsWithTagMessage() - { - verify( - (new \Robo\Task\Vcs\GitStack()) - ->cloneRepo('http://github.com/consolidation-org/Robo') - ->pull() - ->add('-A') - ->commit('changed') - ->push() - ->tag('0.6.0', 'message') - ->push('origin', '0.6.0') - ->getCommand() - )->equals("git clone http://github.com/consolidation-org/Robo && git pull && git add -A && git commit -m 'changed' && git push && git tag -m 'message' 0.6.0 && git push origin 0.6.0"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/GulpTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/GulpTest.php deleted file mode 100644 index e5b36c98..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/GulpTest.php +++ /dev/null @@ -1,85 +0,0 @@ -baseGulp = test::double('Robo\Task\Gulp\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput() - ]); - } - - protected function adjustQuotes($expected) - { - $isWindows = defined('PHP_WINDOWS_VERSION_MAJOR'); - - if (!$isWindows) { - return strtr($expected, '"', "'"); - } - return $expected; - } - - // tests - public function testGulpGetCommand() - { - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->getCommand() - )->equals($this->adjustQuotes('gulp "default"')); - - verify( - (new \Robo\Task\Gulp\Run('another','gulp'))->getCommand() - )->equals($this->adjustQuotes('gulp "another"')); - - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->silent()->getCommand() - )->equals($this->adjustQuotes('gulp "default" --silent')); - - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->noColor()->getCommand() - )->equals($this->adjustQuotes('gulp "default" --no-color')); - - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->color()->getCommand() - )->equals($this->adjustQuotes('gulp "default" --color')); - - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->simple()->getCommand() - )->equals($this->adjustQuotes('gulp "default" --tasks-simple')); - } - - public function testGulpRun() - { - $gulp = test::double('Robo\Task\Gulp\Run', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - $task = (new \Robo\Task\Gulp\Run('default','gulp'))->simple(); - verify($task->getCommand())->equals($this->adjustQuotes('gulp "default" --tasks-simple')); - $task->run(); - $gulp->verifyInvoked('executeCommand', [$this->adjustQuotes('gulp "default" --tasks-simple')]); - } - - public function testGulpUnusualChars() - { - $isWindows = defined('PHP_WINDOWS_VERSION_MAJOR'); - - if ($isWindows) { - - verify( - (new \Robo\Task\Gulp\Run('anotherWith weired!("\') Chars','gulp'))->getCommand() - )->equals('gulp "anotherWith weired!(\"\') Chars"'); - - } else { - - verify( - (new \Robo\Task\Gulp\Run('anotherWith weired!("\') Chars','gulp'))->getCommand() - )->equals("gulp 'anotherWith weired!(\"'\\'') Chars'"); - - } - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/HgTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/HgTest.php deleted file mode 100644 index 7b36ece3..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/HgTest.php +++ /dev/null @@ -1,86 +0,0 @@ -hg = Test::double('Robo\Task\Vcs\HgStack', [ - 'executeCommand' => new \AspectMock\Proxy\Anything(), - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - $this->hgStack = (new \Robo\Task\Vcs\HgStack('hg')); - } - - // tests - public function testHgStackRun() - { - $this->hgStack->stopOnFail()->add()->pull()->run(); - $this->hg->verifyInvoked('executeCommand', ['hg add']); - $this->hg->verifyInvoked('executeCommand', ['hg pull']); - - (new \Robo\Task\Vcs\HgStack('hg'))->add()->pull()->run(); - $this->hg->verifyInvoked('executeCommand', ['hg add && hg pull']); - } - - public function testHgStackPull() - { - verify( - $this->hgStack - ->pull() - ->getCommand() - )->equals('hg pull'); - } - - public function testHgStackAddFiles() - { - verify( - $this->hgStack - ->add('*.php', '*.css') - ->getCommand() - )->equals('hg add -I *.php -X *.css'); - } - - public function testHgStackCommands() - { - verify( - $this->hgStack - ->cloneRepo('https://bitbucket.org/durin42/hgsubversion') - ->pull() - ->add() - ->commit('changed') - ->push() - ->tag('0.6.0') - ->push('0.6.0') - ->getCommand() - )->equals("hg clone https://bitbucket.org/durin42/hgsubversion && hg pull && hg add && hg commit -m 'changed' && hg push && hg tag 0.6.0 && hg push -b '0.6.0'"); - } - - public function testHgStackCommandsWithTagMessage() - { - verify( - $this->hgStack - ->cloneRepo('https://bitbucket.org/durin42/hgsubversion') - ->pull() - ->add() - ->commit('changed') - ->push() - ->tag('0.6.0', 'message') - ->push('0.6.0') - ->getCommand() - )->equals("hg clone https://bitbucket.org/durin42/hgsubversion && hg pull && hg add && hg commit -m 'changed' && hg push && hg tag -m 'message' 0.6.0 && hg push -b '0.6.0'"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/NpmTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/NpmTest.php deleted file mode 100644 index ce3ba6f4..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/NpmTest.php +++ /dev/null @@ -1,52 +0,0 @@ -baseNpm = test::double('Robo\Task\Npm\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testNpmInstall() - { - $npm = test::double('Robo\Task\Npm\Install', ['executeCommand' => null, 'logger' => new \Psr\Log\NullLogger()]); - (new \Robo\Task\Npm\Install('npm'))->run(); - $npm->verifyInvoked('executeCommand', ['npm install']); - } - - public function testNpmUpdate() - { - $npm = test::double('Robo\Task\Npm\Update', ['executeCommand' => null, 'logger' => new \Psr\Log\NullLogger()]); - (new \Robo\Task\Npm\Update('npm'))->run(); - $npm->verifyInvoked('executeCommand', ['npm update']); - } - - public function testNpmInstallCommand() - { - verify( - (new \Robo\Task\Npm\Install('npm'))->getCommand() - )->equals('npm install'); - - verify( - (new \Robo\Task\Npm\Install('npm'))->getCommand() - )->equals('npm install'); - - verify( - (new \Robo\Task\Npm\Install('npm')) - ->noDev() - ->getCommand() - )->equals('npm install --production'); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPServerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPServerTest.php deleted file mode 100644 index 30744958..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPServerTest.php +++ /dev/null @@ -1,59 +0,0 @@ -process = test::double('Symfony\Component\Process\Process', [ - 'run' => false, - 'start' => false, - 'getOutput' => 'Hello world', - 'getExitCode' => 0, - 'logger' => new \Psr\Log\NullLogger(), - ]); - test::double('Robo\Task\Development\PhpServer', ['output' => new \Symfony\Component\Console\Output\NullOutput()]); - } - - public function testServerBackgroundRun() - { - $task = new \Robo\Task\Development\PhpServer('8000'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task->background()->run(); - $this->process->verifyInvoked('start'); - } - - public function testServerRun() - { - $task = new \Robo\Task\Development\PhpServer('8000'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task->run(); - $this->process->verifyInvoked('run'); - } - - public function testServerCommand() - { - if (strtolower(PHP_OS) === 'linux') { - $expectedCommand = 'exec php -S 127.0.0.1:8000 -t web'; - } else { - $expectedCommand = 'php -S 127.0.0.1:8000 -t web'; - } - - verify( - (new \Robo\Task\Development\PhpServer('8000')) - ->host('127.0.0.1') - ->dir('web') - ->getCommand() - )->equals($expectedCommand); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPUnitTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPUnitTest.php deleted file mode 100644 index 3f7b235c..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPUnitTest.php +++ /dev/null @@ -1,41 +0,0 @@ -phpunit = test::double('Robo\Task\Testing\PHPUnit', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testPhpUnitRun() - { - (new \Robo\Task\Testing\PHPUnit())->run(); - $this->phpunit->verifyInvoked('executeCommand'); - } - - public function testPHPUnitCommand() - { - $task = (new \Robo\Task\Testing\PHPUnit('phpunit')) - ->bootstrap('bootstrap.php') - ->filter('Model') - ->group('important') - ->xml('result.xml') - ->debug(); - verify($task->getCommand())->equals('phpunit --bootstrap bootstrap.php --filter Model --group important --log-junit result.xml --debug'); - $task->run(); - $this->phpunit->verifyInvoked('executeCommand', ['phpunit --bootstrap bootstrap.php --filter Model --group important --log-junit result.xml --debug']); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ParallelExecTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/ParallelExecTest.php deleted file mode 100644 index 037f7ee3..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ParallelExecTest.php +++ /dev/null @@ -1,43 +0,0 @@ -process = test::double('Symfony\Component\Process\Process', [ - 'run' => false, - 'start' => false, - 'isRunning' => false, - 'getOutput' => 'Hello world', - 'getExitCode' => 0, - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - public function testParallelExec() - { - $task = new \Robo\Task\Base\ParallelExec(); - $task->setLogger($this->guy->logger()); - - $result = $task - ->process('ls 1') - ->process('ls 2') - ->process('ls 3') - ->run(); - $this->process->verifyInvokedMultipleTimes('start', 3); - verify($result->getExitCode())->equals(0); - $this->guy->seeInOutput("3 processes finished"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PhpspecTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/PhpspecTest.php deleted file mode 100644 index 71336b33..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PhpspecTest.php +++ /dev/null @@ -1,42 +0,0 @@ -phpspec = test::double('Robo\Task\Testing\Phpspec', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testPhpSpecRun() - { - (new \Robo\Task\Testing\Phpspec('phpspec'))->run(); - $this->phpspec->verifyInvoked('executeCommand', ['phpspec run']); - } - - public function testPHPSpecCommand() - { - $task = (new \Robo\Task\Testing\Phpspec('phpspec')) - ->stopOnFail() - ->noCodeGeneration() - ->quiet() - ->verbose('vv') - ->noAnsi() - ->noInteraction() - ->format('pretty'); - verify($task->getCommand())->equals('phpspec run --stop-on-failure --no-code-generation --quiet -vv --no-ansi --no-interaction --format pretty'); - $task->run(); - $this->phpspec->verifyInvoked('executeCommand', ['phpspec run --stop-on-failure --no-code-generation --quiet -vv --no-ansi --no-interaction --format pretty']); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/RsyncTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/RsyncTest.php deleted file mode 100644 index 957d2188..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/RsyncTest.php +++ /dev/null @@ -1,59 +0,0 @@ -fromPath('src/') - ->toHost('localhost') - ->toUser('dev') - ->toPath('/var/www/html/app/') - ->recursive() - ->excludeVcs() - ->checksum() - ->wholeFile() - ->verbose() - ->progress() - ->humanReadable() - ->stats() - ->getCommand() - )->equals( - 'rsync --recursive --exclude .git --exclude .svn --exclude .hg --checksum --whole-file --verbose --progress --human-readable --stats src/ \'dev@localhost:/var/www/html/app/\'' - ); - - // From the folder 'foo bar' (with space) in 'src' directory - verify( - (new \Robo\Task\Remote\Rsync()) - ->fromPath('src/foo bar/baz') - ->toHost('localhost') - ->toUser('dev') - ->toPath('/var/path/with/a space') - ->getCommand() - )->equals( - 'rsync \'src/foo bar/baz\' \'dev@localhost:/var/path/with/a space\'' - ); - - // Copy two folders, 'src/foo' and 'src/bar' - verify( - (new \Robo\Task\Remote\Rsync()) - ->fromPath(['src/foo', 'src/bar']) - ->toHost('localhost') - ->toUser('dev') - ->toPath('/var/path/with/a space') - ->getCommand() - )->equals( - 'rsync src/foo src/bar \'dev@localhost:/var/path/with/a space\'' - ); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SemVerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/SemVerTest.php deleted file mode 100644 index f68535bb..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SemVerTest.php +++ /dev/null @@ -1,72 +0,0 @@ - null]); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('major') - ->prerelease('RC') - ->increment('patch') - ->run(); - verify($res->getMessage())->equals('v1.0.1-RC.1'); - $semver->verifyInvoked('dump'); - } - - public function testSemverIncrementMinorAfterIncrementedPatch() - { - $semver = test::double('Robo\Task\Development\SemVer', ['dump' => null]); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('patch') - ->run(); - verify($res->getMessage())->equals('v0.0.1'); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('minor') - ->run(); - verify($res->getMessage())->equals('v0.1.0'); - $semver->verifyInvoked('dump'); - } - - public function testSemverIncrementMajorAfterIncrementedMinorAndPatch() - { - $semver = test::double('Robo\Task\Development\SemVer', ['dump' => null]); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('patch') - ->run(); - verify($res->getMessage())->equals('v0.0.1'); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('minor') - ->run(); - verify($res->getMessage())->equals('v0.1.0'); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('major') - ->run(); - verify($res->getMessage())->equals('v1.0.0'); - $semver->verifyInvoked('dump'); - } - - public function testThrowsExceptionWhenIncrementWithWrongParameter() - { - \PHPUnit_Framework_TestCase::setExpectedExceptionRegExp( - 'Robo\Exception\TaskException', - '/Bad argument, only one of the following is allowed: major, minor, patch/' - ); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('wrongParameter'); - } - - public function testThrowsExceptionWhenSemverFileNotWriteable() - { - \PHPUnit_Framework_TestCase::setExpectedExceptionRegExp( - 'Robo\Exception\TaskException', - '/Failed to write semver file./' - ); - (new \Robo\Task\Development\SemVer('/.semver')) - ->increment('major') - ->run(); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SshTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/SshTest.php deleted file mode 100644 index ec228998..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SshTest.php +++ /dev/null @@ -1,61 +0,0 @@ -exec('ls -la') - ->exec('chmod g+x logs') - ->getCommand() - )->equals("ssh user@remote.example.com 'ls -la && chmod g+x logs'"); - } - - public function testStopOnFail() - { - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->stopOnFail(false) - ->exec('one') - ->exec('two') - ->getCommand() - )->equals("ssh user@remote.example.com 'one ; two'"); - } - - /** - * Sets static configuration, then runs task without working dir, with working dir and again without. - */ - public function testWorkingDirectoryStaticConfiguration() - { - \Robo\Task\Remote\Ssh::configure('remoteDir', '/some-dir'); - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->setConfig(Robo::config()) - ->exec('echo test') - ->getCommand() - )->equals("ssh user@remote.example.com 'cd \"/some-dir\" && echo test'"); - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->remoteDir('/other-dir') - ->exec('echo test') - ->getCommand() - )->equals("ssh user@remote.example.com 'cd \"/other-dir\" && echo test'"); - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->setConfig(Robo::config()) - ->exec('echo test') - ->getCommand() - )->equals("ssh user@remote.example.com 'cd \"/some-dir\" && echo test'"); - \Robo\Task\Remote\Ssh::configure('remoteDir', null); - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->exec('echo test') - ->getCommand() - )->equals("ssh user@remote.example.com 'echo test'"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SvnTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/SvnTest.php deleted file mode 100644 index eeff03b7..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SvnTest.php +++ /dev/null @@ -1,49 +0,0 @@ -svn = test::double('Robo\Task\Vcs\SvnStack', [ - 'executeCommand' => new \AspectMock\Proxy\Anything(), - 'output' => $nullOutput, - 'logger' => new \Psr\Log\NullLogger(), - 'logger' => Robo::logger(), - 'getConfig' => Robo::config(), - 'progressIndicator' => $progressIndicator, - ]); - } - - // tests - public function testSvnStackRun() - { - $this->svn->construct()->update()->add()->run(); - $this->svn->verifyInvoked('executeCommand', ['svn update && svn add']); - } - - public function testSvnStackCommands() - { - verify( - (new \Robo\Task\Vcs\SvnStack('guest', 'foo')) - ->checkout('svn://server/trunk') - ->update() - ->add() - ->commit('changed') - ->getCommand() - )->equals("svn --username guest --password foo checkout svn://server/trunk && svn --username guest --password foo update && svn --username guest --password foo add && svn --username guest --password foo commit -m 'changed'"); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/_bootstrap.php b/lib/composer/vendor/consolidation/robo/tests/unit/_bootstrap.php deleted file mode 100644 index 8a885558..00000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/_bootstrap.php +++ /dev/null @@ -1,2 +0,0 @@ -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 diff --git a/lib/composer/vendor/container-interop/container-interop/docs/images/priority.png b/lib/composer/vendor/container-interop/container-interop/docs/images/priority.png index 5760dc71b557fea7ec5bd5699adfd1c228b9cdec..d02cb7d1f1ed29c6fa87a269cdd8955e0e907a4c 100644 GIT binary patch literal 16252 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'a.b.c', 'C'); +$data->set('a.b.d', 'D1'); +$data->append('a.b.d', 'D2'); +$data->set('a.b.e', array('E0', 'E1', 'E2')); + +// C +$data->get('a.b.c'); + +// array('D1', 'D2') +$data->get('a.b.d'); + +// array('E0', 'E1', 'E2') +$data->get('a.b.e'); + +// true +$data->has('a.b.c'); + +// false +$data->has('a.b.d.j'); +``` + +A more concrete example: + +```php +use Dflydev\DotAccessData\Data; + +$data = new Data(array( + 'hosts' => array( + 'hewey' => array( + 'username' => 'hman', + 'password' => 'HPASS', + 'roles' => array('web'), + ), + 'dewey' => array( + 'username' => 'dman', + 'password' => 'D---S', + 'roles' => array('web', 'db'), + 'nick' => 'dewey dman' + ), + 'lewey' => array( + 'username' => 'lman', + 'password' => 'LP@$$', + 'roles' => array('db'), + ), + ) +)); + +// hman +$username = $data->get('hosts.hewey.username'); +// HPASS +$password = $data->get('hosts.hewey.password'); +// array('web') +$roles = $data->get('hosts.hewey.roles'); +// dewey dman +$nick = $data->get('hosts.dewey.nick'); +// Unknown +$nick = $data->get('hosts.lewey.nick', 'Unknown'); + +// DataInterface instance +$dewey = $data->getData('hosts.dewey'); +// dman +$username = $dewey->get('username'); +// D---S +$password = $dewey->get('password'); +// array('web', 'db') +$roles = $dewey->get('roles'); + +// No more lewey +$data->remove('hosts.lewey'); + +// Add DB to hewey's roles +$data->append('hosts.hewey.roles', 'db'); + +$data->set('hosts.april', array( + 'username' => 'aman', + 'password' => '@---S', + 'roles' => array('web'), +)); + +// Check if a key exists (true to this case) +$hasKey = $data->has('hosts.dewey.username'); +``` + + +License +------- + +This library is licensed under the New BSD License - see the LICENSE file +for details. + + +Community +--------- + +If you have questions or want to help out, join us in the +[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net. diff --git a/lib/composer/vendor/dflydev/dot-access-data/composer.json b/lib/composer/vendor/dflydev/dot-access-data/composer.json new file mode 100644 index 00000000..b200c9f2 --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/composer.json @@ -0,0 +1,38 @@ +{ + "name": "dflydev/dot-access-data", + "type": "library", + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": ["dot", "access", "data", "notation"], + "license": "MIT", + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "require": { + "php": ">=5.3.2" + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/phpunit.xml.dist b/lib/composer/vendor/dflydev/dot-access-data/phpunit.xml.dist new file mode 100644 index 00000000..2b386b3a --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/phpunit.xml.dist @@ -0,0 +1,14 @@ + + + + + ./tests/Dflydev/DotAccessData + + + + + + ./src/Dflydev/DotAccessData/ + + + diff --git a/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/Data.php b/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/Data.php new file mode 100644 index 00000000..34bda67e --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/Data.php @@ -0,0 +1,220 @@ +data = $data ?: array(); + } + + /** + * {@inheritdoc} + */ + public function append($key, $value = null) + { + if (0 == strlen($key)) { + throw new \RuntimeException("Key cannot be an empty string"); + } + + $currentValue =& $this->data; + $keyPath = explode('.', $key); + + if (1 == count($keyPath)) { + if (!isset($currentValue[$key])) { + $currentValue[$key] = array(); + } + if (!is_array($currentValue[$key])) { + // Promote this key to an array. + // TODO: Is this really what we want to do? + $currentValue[$key] = array($currentValue[$key]); + } + $currentValue[$key][] = $value; + + return; + } + + $endKey = array_pop($keyPath); + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey =& $keyPath[$i]; + if ( ! isset($currentValue[$currentKey]) ) { + $currentValue[$currentKey] = array(); + } + $currentValue =& $currentValue[$currentKey]; + } + + if (!isset($currentValue[$endKey])) { + $currentValue[$endKey] = array(); + } + if (!is_array($currentValue[$endKey])) { + $currentValue[$endKey] = array($currentValue[$endKey]); + } + // Promote this key to an array. + // TODO: Is this really what we want to do? + $currentValue[$endKey][] = $value; + } + + /** + * {@inheritdoc} + */ + public function set($key, $value = null) + { + if (0 == strlen($key)) { + throw new \RuntimeException("Key cannot be an empty string"); + } + + $currentValue =& $this->data; + $keyPath = explode('.', $key); + + if (1 == count($keyPath)) { + $currentValue[$key] = $value; + + return; + } + + $endKey = array_pop($keyPath); + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey =& $keyPath[$i]; + if (!isset($currentValue[$currentKey])) { + $currentValue[$currentKey] = array(); + } + if (!is_array($currentValue[$currentKey])) { + throw new \RuntimeException("Key path at $currentKey of $key cannot be indexed into (is not an array)"); + } + $currentValue =& $currentValue[$currentKey]; + } + $currentValue[$endKey] = $value; + } + + /** + * {@inheritdoc} + */ + public function remove($key) + { + if (0 == strlen($key)) { + throw new \RuntimeException("Key cannot be an empty string"); + } + + $currentValue =& $this->data; + $keyPath = explode('.', $key); + + if (1 == count($keyPath)) { + unset($currentValue[$key]); + + return; + } + + $endKey = array_pop($keyPath); + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey =& $keyPath[$i]; + if (!isset($currentValue[$currentKey])) { + return; + } + $currentValue =& $currentValue[$currentKey]; + } + unset($currentValue[$endKey]); + } + + /** + * {@inheritdoc} + */ + public function get($key, $default = null) + { + $currentValue = $this->data; + $keyPath = explode('.', $key); + + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey = $keyPath[$i]; + if (!isset($currentValue[$currentKey]) ) { + return $default; + } + if (!is_array($currentValue)) { + return $default; + } + $currentValue = $currentValue[$currentKey]; + } + + return $currentValue === null ? $default : $currentValue; + } + + /** + * {@inheritdoc} + */ + public function has($key) + { + $currentValue = &$this->data; + $keyPath = explode('.', $key); + + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey = $keyPath[$i]; + if ( + !is_array($currentValue) || + !array_key_exists($currentKey, $currentValue) + ) { + return false; + } + $currentValue = &$currentValue[$currentKey]; + } + + return true; + } + + /** + * {@inheritdoc} + */ + public function getData($key) + { + $value = $this->get($key); + if (is_array($value) && Util::isAssoc($value)) { + return new Data($value); + } + + throw new \RuntimeException("Value at '$key' could not be represented as a DataInterface"); + } + + /** + * {@inheritdoc} + */ + public function import(array $data, $clobber = true) + { + $this->data = Util::mergeAssocArray($this->data, $data, $clobber); + } + + /** + * {@inheritdoc} + */ + public function importData(DataInterface $data, $clobber = true) + { + $this->import($data->export(), $clobber); + } + + /** + * {@inheritdoc} + */ + public function export() + { + return $this->data; + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/DataInterface.php b/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/DataInterface.php new file mode 100644 index 00000000..3498f26e --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/DataInterface.php @@ -0,0 +1,89 @@ + $v) { + if (!isset($to[$k])) { + $to[$k] = $v; + } else { + $to[$k] = self::mergeAssocArray($to[$k], $v, $clobber); + } + } + + return $to; + } + + return $clobber ? $from : $to; + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/DataTest.php b/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/DataTest.php new file mode 100644 index 00000000..c75260be --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/DataTest.php @@ -0,0 +1,205 @@ + 'A', + 'b' => array( + 'b' => 'B', + 'c' => array('C1', 'C2', 'C3'), + 'd' => array( + 'd1' => 'D1', + 'd2' => 'D2', + 'd3' => 'D3', + ), + ), + 'c' => array('c1', 'c2', 'c3'), + 'f' => array( + 'g' => array( + 'h' => 'FGH', + ), + ), + 'h' => array( + 'i' => 'I', + ), + 'i' => array( + 'j' => 'J', + ), + ); + } + + protected function runSampleDataTests(DataInterface $data) + { + $this->assertEquals('A', $data->get('a')); + $this->assertEquals('B', $data->get('b.b')); + $this->assertEquals(array('C1', 'C2', 'C3'), $data->get('b.c')); + $this->assertEquals('D3', $data->get('b.d.d3')); + $this->assertEquals(array('c1', 'c2', 'c3'), $data->get('c')); + $this->assertNull($data->get('foo'), 'Foo should not exist'); + $this->assertNull($data->get('f.g.h.i')); + $this->assertEquals($data->get('foo', 'default-value-1'), 'default-value-1', 'Return default value'); + $this->assertEquals($data->get('f.g.h.i', 'default-value-2'), 'default-value-2'); + } + + public function testAppend() + { + $data = new Data($this->getSampleData()); + + $data->append('a', 'B'); + $data->append('c', 'c4'); + $data->append('b.c', 'C4'); + $data->append('b.d.d3', 'D3b'); + $data->append('b.d.d4', 'D'); + $data->append('e', 'E'); + $data->append('f.a', 'b'); + $data->append('h.i', 'I2'); + $data->append('i.k.l', 'L'); + + $this->assertEquals(array('A', 'B'), $data->get('a')); + $this->assertEquals(array('c1', 'c2', 'c3', 'c4'), $data->get('c')); + $this->assertEquals(array('C1', 'C2', 'C3', 'C4'), $data->get('b.c')); + $this->assertEquals(array('D3', 'D3b'), $data->get('b.d.d3')); + $this->assertEquals(array('D'), $data->get('b.d.d4')); + $this->assertEquals(array('E'), $data->get('e')); + $this->assertEquals(array('b'), $data->get('f.a')); + $this->assertEquals(array('I', 'I2'), $data->get('h.i')); + $this->assertEquals(array('L'), $data->get('i.k.l')); + + $this->setExpectedException('RuntimeException'); + + $data->append('', 'broken'); + } + + public function testSet() + { + $data = new Data; + + $this->assertNull($data->get('a')); + $this->assertNull($data->get('b.c')); + $this->assertNull($data->get('d.e')); + + $data->set('a', 'A'); + $data->set('b.c', 'C'); + $data->set('d.e', array('f' => 'F', 'g' => 'G',)); + + $this->assertEquals('A', $data->get('a')); + $this->assertEquals(array('c' => 'C'), $data->get('b')); + $this->assertEquals('C', $data->get('b.c')); + $this->assertEquals('F', $data->get('d.e.f')); + $this->assertEquals(array('e' => array('f' => 'F', 'g' => 'G',)), $data->get('d')); + + $this->setExpectedException('RuntimeException'); + + $data->set('', 'broken'); + } + + public function testSetClobberStringInPath() + { + $data = new Data; + + $data->set('a.b.c', 'Should not be able to write to a.b.c.d.e'); + + $this->setExpectedException('RuntimeException'); + + $data->set('a.b.c.d.e', 'broken'); + } + + public function testRemove() + { + $data = new Data($this->getSampleData()); + + $data->remove('a'); + $data->remove('b.c'); + $data->remove('b.d.d3'); + $data->remove('d'); + $data->remove('d.e.f'); + $data->remove('empty.path'); + + $this->assertNull($data->get('a')); + $this->assertNull($data->get('b.c')); + $this->assertNull($data->get('b.d.d3')); + $this->assertNull(null); + $this->assertEquals('D2', $data->get('b.d.d2')); + + $this->setExpectedException('RuntimeException'); + + $data->remove('', 'broken'); + } + + public function testGet() + { + $data = new Data($this->getSampleData()); + + $this->runSampleDataTests($data); + } + + public function testHas() + { + $data = new Data($this->getSampleData()); + + foreach ( + array('a', 'i', 'b.d', 'f.g.h', 'h.i', 'b.d.d1') as $existentKey + ) { + $this->assertTrue($data->has($existentKey)); + } + + foreach ( + array('p', 'b.b1', 'b.c.C1', 'h.i.I', 'b.d.d1.D1') as $notExistentKey + ) { + $this->assertFalse($data->has($notExistentKey)); + } + } + + public function testGetData() + { + $wrappedData = new Data(array( + 'wrapped' => array( + 'sampleData' => $this->getSampleData() + ), + )); + + $data = $wrappedData->getData('wrapped.sampleData'); + + $this->runSampleDataTests($data); + + $this->setExpectedException('RuntimeException'); + + $data = $wrappedData->getData('wrapped.sampleData.a'); + } + + public function testImport() + { + $data = new Data(); + $data->import($this->getSampleData()); + + $this->runSampleDataTests($data); + } + + public function testImportData() + { + $data = new Data(); + $data->importData(new Data($this->getSampleData())); + + $this->runSampleDataTests($data); + } + + public function testExport() + { + $data = new Data($this->getSampleData()); + + $this->assertEquals($this->getSampleData(), $data->export()); + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/UtilTest.php b/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/UtilTest.php new file mode 100644 index 00000000..3a7c9ac5 --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/UtilTest.php @@ -0,0 +1,121 @@ +assertTrue(Util::isAssoc(array('a' => 'A',))); + $this->assertTrue(Util::isAssoc(array())); + $this->assertFalse(Util::isAssoc(array(1 => 'One',))); + } + + /** + * @dataProvider mergeAssocArrayProvider + */ + public function testMergeAssocArray($message, $to, $from, $clobber, $expectedResult) + { + $result = Util::mergeAssocArray($to, $from, $clobber); + $this->assertEquals($expectedResult, $result, $message); + } + + public function mergeAssocArrayProvider() + { + return array( + + array( + 'Clobber should replace to value with from value for strings (shallow)', + // to + array('a' => 'A'), + // from + array('a' => 'B'), + // clobber + true, + // expected result + array('a' => 'B'), + ), + + array( + 'Clobber should replace to value with from value for strings (deep)', + // to + array('a' => array('b' => 'B',),), + // from + array('a' => array('b' => 'C',),), + // clobber + true, + // expected result + array('a' => array('b' => 'C',),), + ), + + array( + 'Clobber should NOTreplace to value with from value for strings (shallow)', + // to + array('a' => 'A'), + // from + array('a' => 'B'), + // clobber + false, + // expected result + array('a' => 'A'), + ), + + array( + 'Clobber should NOT replace to value with from value for strings (deep)', + // to + array('a' => array('b' => 'B',),), + // from + array('a' => array('b' => 'C',),), + // clobber + false, + // expected result + array('a' => array('b' => 'B',),), + ), + + array( + 'Associative arrays should be combined', + // to + array('a' => array('b' => 'B',),), + // from + array('a' => array('c' => 'C',),), + // clobber + null, + // expected result + array('a' => array('b' => 'B', 'c' => 'C',),), + ), + + array( + 'Arrays should be replaced (with clobber enabled)', + // to + array('a' => array('b', 'c',)), + // from + array('a' => array('B', 'C',),), + // clobber + true, + // expected result + array('a' => array('B', 'C',),), + ), + + array( + 'Arrays should be NOT replaced (with clobber disabled)', + // to + array('a' => array('b', 'c',)), + // from + array('a' => array('B', 'C',),), + // clobber + false, + // expected result + array('a' => array('b', 'c',),), + ), + ); + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/tests/bootstrap.php b/lib/composer/vendor/dflydev/dot-access-data/tests/bootstrap.php new file mode 100644 index 00000000..a10725e9 --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/tests/bootstrap.php @@ -0,0 +1,13 @@ +frames = array_filter($this->frames, $callable); + $this->frames = array_values(array_filter($this->frames, $callable)); return $this; } @@ -146,7 +146,7 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C */ public function countIsApplication() { - return count(array_filter($this->frames, function(Frame $f) { + return count(array_filter($this->frames, function (Frame $f) { return $f->isApplication(); })); } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Exception/Inspector.php b/lib/composer/vendor/filp/whoops/src/Whoops/Exception/Inspector.php index 108c2ae0..c88323be 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Exception/Inspector.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Exception/Inspector.php @@ -67,7 +67,8 @@ class Inspector return $this->extractDocrefUrl($this->exception->getMessage())['url']; } - private function extractDocrefUrl($message) { + private function extractDocrefUrl($message) + { $docref = [ 'message' => $message, 'url' => null, @@ -128,7 +129,6 @@ class Inspector // Fill empty line/file info for call_user_func_array usages (PHP Bug #44428) foreach ($frames as $k => $frame) { - if (empty($frame['file'])) { // Default values when file and line are missing $file = '[internal]'; @@ -144,7 +144,6 @@ class Inspector $frames[$k]['file'] = $file; $frames[$k]['line'] = $line; } - } // Find latest non-error handling frame index ($i) used to remove error handling frames diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/Handler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/Handler.php index 78bad01d..cf1f7087 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/Handler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/Handler.php @@ -14,13 +14,20 @@ use Whoops\RunInterface; */ abstract class Handler implements HandlerInterface { - /** - * Return constants that can be returned from Handler::handle - * to message the handler walker. + /* + Return constants that can be returned from Handler::handle + to message the handler walker. */ const DONE = 0x10; // returning this is optional, only exists for // semantic purposes + /** + * The Handler has handled the Throwable in some way, and wishes to skip any other Handler. + * Execution will continue. + */ const LAST_HANDLER = 0x20; + /** + * The Handler has handled the Throwable in some way, and wishes to quit/stop execution + */ const QUIT = 0x30; /** diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php index f3559a7b..fdd7ead3 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php @@ -55,23 +55,23 @@ class JsonResponseHandler extends Handler */ public function handle() { - if ($this->jsonApi === true) { - $response = [ - 'errors' => [ - Formatter::formatExceptionAsDataArray( - $this->getInspector(), - $this->addTraceToOutput() - ), - ] - ]; - } else { - $response = [ - 'error' => Formatter::formatExceptionAsDataArray( - $this->getInspector(), - $this->addTraceToOutput() - ), - ]; - } + if ($this->jsonApi === true) { + $response = [ + 'errors' => [ + Formatter::formatExceptionAsDataArray( + $this->getInspector(), + $this->addTraceToOutput() + ), + ] + ]; + } else { + $response = [ + 'error' => Formatter::formatExceptionAsDataArray( + $this->getInspector(), + $this->addTraceToOutput() + ), + ]; + } echo json_encode($response, defined('JSON_PARTIAL_OUTPUT_ON_ERROR') ? JSON_PARTIAL_OUTPUT_ON_ERROR : 0); diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php index 78dbacb4..2f5be906 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php @@ -151,7 +151,8 @@ class PlainTextHandler extends Handler public function generateResponse() { $exception = $this->getException(); - return sprintf("%s: %s in file %s on line %d%s\n", + return sprintf( + "%s: %s in file %s on line %d%s\n", get_class($exception), $exception->getMessage(), $exception->getFile(), @@ -221,7 +222,8 @@ class PlainTextHandler extends Handler ); } - return sprintf("\n%s", + return sprintf( + "\n%s", preg_replace('/^/m', self::VAR_DUMP_PREFIX, ob_get_clean()) ); } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php index 0f215a8b..1a0fcc83 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php @@ -168,6 +168,7 @@ class PrettyPageHandler extends Handler $templateFile = $this->getResource("views/layout.html.php"); $cssFile = $this->getResource("css/whoops.base.css"); $zeptoFile = $this->getResource("js/zepto.min.js"); + $prettifyFile = $this->getResource("js/prettify.min.js"); $clipboard = $this->getResource("js/clipboard.min.js"); $jsFile = $this->getResource("js/whoops.base.js"); @@ -186,6 +187,7 @@ class PrettyPageHandler extends Handler // @todo: Asset compiler "stylesheet" => file_get_contents($cssFile), "zepto" => file_get_contents($zeptoFile), + "prettify" => file_get_contents($prettifyFile), "clipboard" => file_get_contents($clipboard), "javascript" => file_get_contents($jsFile), @@ -491,7 +493,7 @@ class PrettyPageHandler extends Handler } if (is_string($this->editor) && isset($this->editors[$this->editor]) && !is_callable($this->editors[$this->editor])) { - return [ + return [ 'ajax' => false, 'url' => $this->editors[$this->editor], ]; @@ -674,7 +676,8 @@ class PrettyPageHandler extends Handler * @param $superGlobalName string the name of the superglobal array, e.g. '_GET' * @param $key string the key within the superglobal */ - public function blacklist($superGlobalName, $key) { + public function blacklist($superGlobalName, $key) + { $this->blacklist[$superGlobalName][] = $key; } @@ -688,11 +691,12 @@ class PrettyPageHandler extends Handler * @param $superGlobalName string the name of the superglobal array, e.g. '_GET' * @return array $values without sensitive data */ - private function masked(array $superGlobal, $superGlobalName) { + private function masked(array $superGlobal, $superGlobalName) + { $blacklisted = $this->blacklist[$superGlobalName]; $values = $superGlobal; - foreach($blacklisted as $key) { + foreach ($blacklisted as $key) { if (isset($superGlobal[$key])) { $values[$key] = str_repeat('*', strlen($superGlobal[$key])); } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php index f94497f9..b6f93c57 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php @@ -62,7 +62,7 @@ class XmlResponseHandler extends Handler /** * @param SimpleXMLElement $node Node to append data to, will be modified in place - * @param array|Traversable $data + * @param array|\Traversable $data * @return SimpleXMLElement The modified node, for chaining */ private static function addDataToNode(\SimpleXMLElement $node, $data) @@ -93,7 +93,7 @@ class XmlResponseHandler extends Handler /** * The main function for converting to an XML document. * - * @param array|Traversable $data + * @param array|\Traversable $data * @return string XML */ private static function toXml($data) diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css index 56109b8a..0289f122 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css @@ -228,8 +228,6 @@ header { } .code-block { - max-height: 345px; - overflow: hidden; padding: 10px; margin: 0; border-radius: 6px; @@ -384,13 +382,15 @@ pre.code-block, code.code-block, .frame-args.code-block, .frame-args.code-block .linenums li.current{ background: rgba(255, 100, 100, .07); - padding-top: 4px; - padding-left: 1px; } .linenums li.current.active { background: rgba(255, 100, 100, .17); } +pre:not(.prettyprinted) { + padding-left: 60px; +} + #plain-exception { display: none; } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js new file mode 100644 index 00000000..4827bc3f --- /dev/null +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js @@ -0,0 +1,28 @@ +var r=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function O(a){function i(d){var a=d.charCodeAt(0);if(a!==92)return a;var f=d.charAt(1);return(a=s[f])?a:"0"<=f&&f<="7"?parseInt(d.substring(1),8):f==="u"||f==="x"?parseInt(d.substring(2),16):d.charCodeAt(1)}function g(d){if(d<32)return(d<16?"\\x0":"\\x")+d.toString(16);d=String.fromCharCode(d);return d==="\\"||d==="-"||d==="]"||d==="^"?"\\"+d:d}function j(d){var a=d.substring(1,d.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),d=[],f= +a[0]==="^",b=["["];f&&b.push("^");for(var f=f?1:0,c=a.length;f122||(e<65||h>90||d.push([Math.max(65,h)|32,Math.min(e,90)|32]),e<97||h>122||d.push([Math.max(97,h)&-33,Math.min(e,122)&-33]))}}d.sort(function(d,a){return d[0]-a[0]||a[1]-d[1]});a=[];c=[];for(f=0;fh[0]&&(h[1]+1>h[0]&&b.push("-"),b.push(g(h[1])));b.push("]");return b.join("")}function t(d){for(var a=d.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=a.length,i=[],c=0,h=0;c=2&&d==="["?a[c]=j(e):d!=="\\"&&(a[c]=e.replace(/[A-Za-z]/g,function(d){d=d.charCodeAt(0);return"["+String.fromCharCode(d&-33,d|32)+"]"}));return a.join("")}for(var z=0,w=!1,k=!1,m=0,b=a.length;m=5&&"lang-"===f.substring(0, +5))&&!(u&&typeof u[1]==="string"))c=!1,f="src";c||(s[v]=f)}h=b;b+=v.length;if(c){c=u[1];var e=v.indexOf(c),p=e+c.length;u[2]&&(p=v.length-u[2].length,e=p-c.length);f=f.substring(5);E(k+h,v.substring(0,e),g,m);E(k+h+e,c,F(f,c),m);E(k+h+p,v.substring(p),g,m)}else m.push(k+h,f)}a.g=m}var j={},t;(function(){for(var g=a.concat(i),k=[],m={},b=0,o=g.length;b=0;)j[q.charAt(d)]=s;s=s[1];q=""+s;m.hasOwnProperty(q)||(k.push(s),m[q]=r)}k.push(/[\S\s]/);t= +O(k)})();var z=i.length;return g}function l(a){var i=[],g=[];a.tripleQuotedStrings?i.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,r,"'\""]):a.multiLineStrings?i.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,r,"'\"`"]):i.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,r,"\"'"]);a.verbatimStrings&& +g.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,r]);var j=a.hashComments;j&&(a.cStyleComments?(j>1?i.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,r,"#"]):i.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,r,"#"]),g.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,r])):i.push(["com",/^#[^\n\r]*/,r,"#"]));a.cStyleComments&&(g.push(["com",/^\/\/[^\n\r]*/,r]),g.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/, +r]));a.regexLiterals&&g.push(["lang-regex",/^(?:^^\.?|[+-]|[!=]={0,2}|#|%=?|&&?=?|\(|\*=?|[+-]=|->|\/=?|::?|<{1,3}=?|[,;?@[{~]|\^\^?=?|\|\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(j=a.types)&&g.push(["typ",j]);a=(""+a.keywords).replace(/^ | $/g,"");a.length&&g.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),r]);i.push(["pln",/^\s+/,r," \r\n\t\u00a0"]);g.push(["lit", +/^@[$_a-z][\w$@]*/i,r],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,r],["pln",/^[$_a-z][\w$@]*/i,r],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,r,"0123456789"],["pln",/^\\[\S\s]?/,r],["pun",/^.[^\s\w"$'./@\\`]*/,r]);return x(i,g)}function G(a,i,g){function j(a){switch(a.nodeType){case 1:if(z.test(a.className))break;if("br"===a.nodeName)t(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)j(a);break;case 3:case 4:if(g){var b= +a.nodeValue,f=b.match(n);if(f){var i=b.substring(0,f.index);a.nodeValue=i;(b=b.substring(f.index+f[0].length))&&a.parentNode.insertBefore(k.createTextNode(b),a.nextSibling);t(a);i||a.parentNode.removeChild(a)}}}}function t(a){function i(a,b){var d=b?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=i(e,1),f=a.nextSibling;e.appendChild(d);for(var g=f;g;g=f)f=g.nextSibling,e.appendChild(g)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=i(a.nextSibling,0),f;(f=a.parentNode)&&f.nodeType=== +1;)a=f;b.push(a)}for(var z=/(?:^|\s)nocode(?:\s|$)/,n=/\r\n?|\n/,k=a.ownerDocument,m=k.createElement("li");a.firstChild;)m.appendChild(a.firstChild);for(var b=[m],o=0;o=0;){var j= +i[g];A.hasOwnProperty(j)?C.console&&console.warn("cannot override language handler %s",j):A[j]=a}}function F(a,i){if(!a||!A.hasOwnProperty(a))a=/^\s*=e&&(j+=2);g>=p&&(s+=2)}}finally{if(c)c.style.display=h}}catch(A){C.console&&console.log(A&&A.stack?A.stack:A)}}var C=window,y=["break,continue,do,else,for,if,return,while"],B=[[y,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],I=[B,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"], +J=[B,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],K=[J,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],B=[B,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"], +L=[y,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],M=[y,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],y=[y,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],N=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/, +Q=/\S/,R=l({keywords:[I,K,B,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+L,M,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};n(R,["default-code"]);n(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-", +/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);n(x([["pln",/^\s+/,r," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,r,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/], +["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);n(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);n(l({keywords:I,hashComments:!0,cStyleComments:!0,types:N}),["c","cc","cpp","cxx","cyc","m"]);n(l({keywords:"null,true,false"}),["json"]);n(l({keywords:K,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:N}), +["cs"]);n(l({keywords:J,cStyleComments:!0}),["java"]);n(l({keywords:y,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);n(l({keywords:L,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py"]);n(l({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);n(l({keywords:M,hashComments:!0, +multiLineStrings:!0,regexLiterals:!0}),["rb"]);n(l({keywords:B,cStyleComments:!0,regexLiterals:!0}),["js"]);n(l({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);n(x([],[["str",/^[\S\s]+/]]),["regex"]);var S=C.PR={createSimpleLexer:x,registerLangHandler:n,sourceDecorator:l, +PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:C.prettyPrintOne=function(a,i,g){var j=document.createElement("pre");j.innerHTML=a;g&&G(j,g,!0);H({h:i,j:g,c:j,i:1});return j.innerHTML},prettyPrint:C.prettyPrint=function(a){function i(){var u;for(var g=C.PR_SHOULD_USE_CONTINUATION?k.now()+250:Infinity;m 0) { $offset[0].scrollIntoView(); @@ -186,6 +175,9 @@ Zepto(function($) { } }); + // Render late enough for highlightCurrentLine to be ready + renderCurrentCodeblock(); + // Avoid to quit the page with some protocol (e.g. IntelliJ Platform REST API) $ajaxEditors.on('click', function(e){ e.preventDefault(); diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php index ac53ca81..e32cf889 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php @@ -1,13 +1,13 @@ \ No newline at end of file + diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php index 8756ab96..76911d0d 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php @@ -7,6 +7,7 @@ + <?php echo $tpl->escape($page_title) ?> @@ -23,6 +24,7 @@ + diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php b/lib/composer/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php index 74863231..8c828fd9 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php @@ -33,5 +33,4 @@ class HtmlDumperOutput { $this->output = null; } - } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Util/Misc.php b/lib/composer/vendor/filp/whoops/src/Whoops/Util/Misc.php index 7ab5ae8d..001a6879 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Util/Misc.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Util/Misc.php @@ -9,15 +9,15 @@ namespace Whoops\Util; class Misc { /** - * Can we at this point in time send HTTP headers? - * - * Currently this checks if we are even serving an HTTP request, - * as opposed to running from a command line. - * - * If we are serving an HTTP request, we check if it's not too late. - * - * @return bool - */ + * Can we at this point in time send HTTP headers? + * + * Currently this checks if we are even serving an HTTP request, + * as opposed to running from a command line. + * + * If we are serving an HTTP request, we check if it's not too late. + * + * @return bool + */ public static function canSendHeaders() { return isset($_SERVER["REQUEST_URI"]) && !headers_sent(); @@ -40,15 +40,15 @@ class Misc } /** - * Translate ErrorException code into the represented constant. - * - * @param int $error_code - * @return string - */ + * Translate ErrorException code into the represented constant. + * + * @param int $error_code + * @return string + */ public static function translateErrorCode($error_code) { $constants = get_defined_constants(true); - if (array_key_exists('Core' , $constants)) { + if (array_key_exists('Core', $constants)) { foreach ($constants['Core'] as $constant => $value) { if (substr($constant, 0, 2) == 'E_' && $value == $error_code) { return $constant; @@ -60,7 +60,7 @@ class Misc /** * Determine if an error level is fatal (halts execution) - * + * * @param int $level * @return bool */ diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php b/lib/composer/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php index c8e7f6bb..00f6ae49 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php @@ -88,7 +88,8 @@ class TemplateHelper $escaped = $this->escape($raw); return preg_replace( "@([A-z]+?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@", - "$1", $escaped + "$1", + $escaped ); } @@ -166,7 +167,7 @@ class TemplateHelper // exclude verbose information (e.g. exception stack traces) if (class_exists('Symfony\Component\VarDumper\Caster\Caster')) { $cloneVar = $this->getCloner()->cloneVar($value, Caster::EXCLUDE_VERBOSE); - // Symfony VarDumper 2.6 Caster class dont exist. + // Symfony VarDumper 2.6 Caster class dont exist. } else { $cloneVar = $this->getCloner()->cloneVar($value); } @@ -182,7 +183,7 @@ class TemplateHelper return $output; } - return print_r($value, true); + return htmlspecialchars(print_r($value, true)); } /** @@ -203,7 +204,7 @@ class TemplateHelper if ($numFrames > 0) { $html = '
    '; - foreach($frame->getArgs() as $j => $frameArg) { + foreach ($frame->getArgs() as $j => $frameArg) { $html .= '
  1. '. $this->dump($frameArg) .'
  2. '; } $html .= '
'; @@ -265,7 +266,7 @@ class TemplateHelper * Sets a single template variable, by its name: * * @param string $variableName - * @param mixd $variableValue + * @param mixed $variableValue */ public function setVariable($variableName, $variableValue) { diff --git a/lib/composer/vendor/gettext/languages/bin/export-plural-rules b/lib/composer/vendor/gettext/languages/bin/export-plural-rules new file mode 100755 index 00000000..e246599c --- /dev/null +++ b/lib/composer/vendor/gettext/languages/bin/export-plural-rules @@ -0,0 +1,4 @@ +#!/usr/bin/env php +=5.3" - } -} + "name" : "gettext/languages", + "description" : "gettext languages with plural rules", + "keywords" : [ + "localization", + "l10n", + "internationalization", + "i18n", + "translations", + "translate", + "php", + "unicode", + "cldr", + "language", + "languages", + "plural", + "plurals", + "plural rules" + ], + "homepage" : "https://github.com/mlocati/cldr-to-gettext-plural-rules", + "license" : "MIT", + "authors" : [{ + "name" : "Michele Locati", + "email" : "mlocati@gmail.com", + "role" : "Developer" + } + ], + "autoload" : { + "psr-4" : { + "Gettext\\Languages\\" : "src/" + } + }, + "require" : { + "php" : ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^4" + }, + "scripts": { + "test": "phpunit" + }, + "bin" : [ + "bin/export-plural-rules", + "bin/export-plural-rules.php" + ] +} \ No newline at end of file diff --git a/lib/composer/vendor/gettext/languages/src/CldrData.php b/lib/composer/vendor/gettext/languages/src/CldrData.php index 07023201..81b1d9fa 100644 --- a/lib/composer/vendor/gettext/languages/src/CldrData.php +++ b/lib/composer/vendor/gettext/languages/src/CldrData.php @@ -36,7 +36,7 @@ class CldrData $match = null; foreach ($list as $key => $value) { $variant = ''; - if (preg_match('/^(.+)-alt-(short|variant|stand-alone)$/', $key, $match)) { + if (preg_match('/^(.+)-alt-(short|variant|stand-alone|long)$/', $key, $match)) { $key = $match[1]; $variant = $match[2]; } @@ -54,17 +54,13 @@ class CldrData case 'Zzzz': // Script: Unknown Script break; default: - if ( - ((strlen($key) !== 4) || ($key < 'Qaaa') || ($key > 'Qabx')) // Script: Reserved for private use - ) { - switch ($variant) { - case 'stand-alone': - $standAlone[$key] = $value; - break; - case '': - $result[$key] = $value; - break; - } + switch ($variant) { + case 'stand-alone': + $standAlone[$key] = $value; + break; + case '': + $result[$key] = $value; + break; } break; } diff --git a/lib/composer/vendor/gettext/languages/src/FormulaConverter.php b/lib/composer/vendor/gettext/languages/src/FormulaConverter.php index 27960903..4890117c 100644 --- a/lib/composer/vendor/gettext/languages/src/FormulaConverter.php +++ b/lib/composer/vendor/gettext/languages/src/FormulaConverter.php @@ -129,7 +129,11 @@ class FormulaConverter $chunk = "$what >= $from && $what <= $to"; break; case '!=': - $chunk = "($what < $from || $what > $to)"; + if ($what === 'n' && $from <= 0) { + $chunk = "$what > $to"; + } else { + $chunk = "($what < $from || $what > $to)"; + } break; } } diff --git a/lib/composer/vendor/gettext/languages/src/Language.php b/lib/composer/vendor/gettext/languages/src/Language.php index 898bb61e..2323400c 100644 --- a/lib/composer/vendor/gettext/languages/src/Language.php +++ b/lib/composer/vendor/gettext/languages/src/Language.php @@ -73,7 +73,7 @@ class Language $this->categories[] = $category; } if (empty($this->categories)) { - throw new Exception("The language '$id' does not have any plural category"); + throw new Exception("The language '{$info['id']}' does not have any plural category"); } // Let's sort the categories from 'zero' to 'other' usort($this->categories, function (Category $category1, Category $category2) { @@ -81,7 +81,7 @@ class Language }); // The 'other' category should always be there if ($this->categories[count($this->categories) - 1]->id !== CldrData::OTHER_CATEGORY) { - throw new Exception("The language '$id' does not have the '".CldrData::OTHER_CATEGORY."' plural category"); + throw new Exception("The language '{$info['id']}' does not have the '".CldrData::OTHER_CATEGORY."' plural category"); } $this->checkAlwaysTrueCategories(); $this->checkAlwaysFalseCategories(); diff --git a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/languages.json b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/languages.json index 808a36d8..b58f1a59 100644 --- a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/languages.json +++ b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/languages.json @@ -1,636 +1,642 @@ -{ - "main": { - "en-US": { - "identity": { - "version": { - "_cldrVersion": "27", - "_number": "$Revision: 10669 $" - }, - "generation": { - "_date": "$Date: 2014-07-23 16:10:33 -0500 (Wed, 23 Jul 2014) $" - }, - "language": "en", - "territory": "US" - }, - "localeDisplayNames": { - "languages": { - "aa": "Afar", - "ab": "Abkhazian", - "ace": "Achinese", - "ach": "Acoli", - "ada": "Adangme", - "ady": "Adyghe", - "ae": "Avestan", - "aeb": "Tunisian Arabic", - "af": "Afrikaans", - "afh": "Afrihili", - "agq": "Aghem", - "ain": "Ainu", - "ak": "Akan", - "akk": "Akkadian", - "akz": "Alabama", - "ale": "Aleut", - "aln": "Gheg Albanian", - "alt": "Southern Altai", - "am": "Amharic", - "an": "Aragonese", - "ang": "Old English", - "anp": "Angika", - "ar": "Arabic", - "ar-001": "Modern Standard Arabic", - "arc": "Aramaic", - "arn": "Mapuche", - "aro": "Araona", - "arp": "Arapaho", - "arq": "Algerian Arabic", - "arw": "Arawak", - "ary": "Moroccan Arabic", - "arz": "Egyptian Arabic", - "as": "Assamese", - "asa": "Asu", - "ase": "American Sign Language", - "ast": "Asturian", - "av": "Avaric", - "avk": "Kotava", - "awa": "Awadhi", - "ay": "Aymara", - "az": "Azerbaijani", - "az-alt-short": "Azeri", - "azb": "South Azerbaijani", - "ba": "Bashkir", - "bal": "Baluchi", - "ban": "Balinese", - "bar": "Bavarian", - "bas": "Basaa", - "bax": "Bamun", - "bbc": "Batak Toba", - "bbj": "Ghomala", - "be": "Belarusian", - "bej": "Beja", - "bem": "Bemba", - "bew": "Betawi", - "bez": "Bena", - "bfd": "Bafut", - "bfq": "Badaga", - "bg": "Bulgarian", - "bho": "Bhojpuri", - "bi": "Bislama", - "bik": "Bikol", - "bin": "Bini", - "bjn": "Banjar", - "bkm": "Kom", - "bla": "Siksika", - "bm": "Bambara", - "bn": "Bengali", - "bo": "Tibetan", - "bpy": "Bishnupriya", - "bqi": "Bakhtiari", - "br": "Breton", - "bra": "Braj", - "brh": "Brahui", - "brx": "Bodo", - "bs": "Bosnian", - "bss": "Akoose", - "bua": "Buriat", - "bug": "Buginese", - "bum": "Bulu", - "byn": "Blin", - "byv": "Medumba", - "ca": "Catalan", - "cad": "Caddo", - "car": "Carib", - "cay": "Cayuga", - "cch": "Atsam", - "ce": "Chechen", - "ceb": "Cebuano", - "cgg": "Chiga", - "ch": "Chamorro", - "chb": "Chibcha", - "chg": "Chagatai", - "chk": "Chuukese", - "chm": "Mari", - "chn": "Chinook Jargon", - "cho": "Choctaw", - "chp": "Chipewyan", - "chr": "Cherokee", - "chy": "Cheyenne", - "ckb": "Central Kurdish", - "co": "Corsican", - "cop": "Coptic", - "cps": "Capiznon", - "cr": "Cree", - "crh": "Crimean Turkish", - "cs": "Czech", - "csb": "Kashubian", - "cu": "Church Slavic", - "cv": "Chuvash", - "cy": "Welsh", - "da": "Danish", - "dak": "Dakota", - "dar": "Dargwa", - "dav": "Taita", - "de": "German", - "de-AT": "Austrian German", - "de-CH": "Swiss High German", - "del": "Delaware", - "den": "Slave", - "dgr": "Dogrib", - "din": "Dinka", - "dje": "Zarma", - "doi": "Dogri", - "dsb": "Lower Sorbian", - "dtp": "Central Dusun", - "dua": "Duala", - "dum": "Middle Dutch", - "dv": "Divehi", - "dyo": "Jola-Fonyi", - "dyu": "Dyula", - "dz": "Dzongkha", - "dzg": "Dazaga", - "ebu": "Embu", - "ee": "Ewe", - "efi": "Efik", - "egl": "Emilian", - "egy": "Ancient Egyptian", - "eka": "Ekajuk", - "el": "Greek", - "elx": "Elamite", - "en": "English", - "en-AU": "Australian English", - "en-CA": "Canadian English", - "en-GB": "British English", - "en-GB-alt-short": "UK English", - "en-US": "American English", - "en-US-alt-short": "US English", - "enm": "Middle English", - "eo": "Esperanto", - "es": "Spanish", - "es-419": "Latin American Spanish", - "es-ES": "European Spanish", - "es-MX": "Mexican Spanish", - "esu": "Central Yupik", - "et": "Estonian", - "eu": "Basque", - "ewo": "Ewondo", - "ext": "Extremaduran", - "fa": "Persian", - "fan": "Fang", - "fat": "Fanti", - "ff": "Fulah", - "fi": "Finnish", - "fil": "Filipino", - "fit": "Tornedalen Finnish", - "fj": "Fijian", - "fo": "Faroese", - "fon": "Fon", - "fr": "French", - "fr-CA": "Canadian French", - "fr-CH": "Swiss French", - "frc": "Cajun French", - "frm": "Middle French", - "fro": "Old French", - "frp": "Arpitan", - "frr": "Northern Frisian", - "frs": "Eastern Frisian", - "fur": "Friulian", - "fy": "Western Frisian", - "ga": "Irish", - "gaa": "Ga", - "gag": "Gagauz", - "gan": "Gan Chinese", - "gay": "Gayo", - "gba": "Gbaya", - "gbz": "Zoroastrian Dari", - "gd": "Scottish Gaelic", - "gez": "Geez", - "gil": "Gilbertese", - "gl": "Galician", - "glk": "Gilaki", - "gmh": "Middle High German", - "gn": "Guarani", - "goh": "Old High German", - "gom": "Goan Konkani", - "gon": "Gondi", - "gor": "Gorontalo", - "got": "Gothic", - "grb": "Grebo", - "grc": "Ancient Greek", - "gsw": "Swiss German", - "gu": "Gujarati", - "guc": "Wayuu", - "gur": "Frafra", - "guz": "Gusii", - "gv": "Manx", - "gwi": "Gwichʼin", - "ha": "Hausa", - "hai": "Haida", - "hak": "Hakka Chinese", - "haw": "Hawaiian", - "he": "Hebrew", - "hi": "Hindi", - "hif": "Fiji Hindi", - "hil": "Hiligaynon", - "hit": "Hittite", - "hmn": "Hmong", - "ho": "Hiri Motu", - "hr": "Croatian", - "hsb": "Upper Sorbian", - "hsn": "Xiang Chinese", - "ht": "Haitian", - "hu": "Hungarian", - "hup": "Hupa", - "hy": "Armenian", - "hz": "Herero", - "ia": "Interlingua", - "iba": "Iban", - "ibb": "Ibibio", - "id": "Indonesian", - "ie": "Interlingue", - "ig": "Igbo", - "ii": "Sichuan Yi", - "ik": "Inupiaq", - "ilo": "Iloko", - "inh": "Ingush", - "io": "Ido", - "is": "Icelandic", - "it": "Italian", - "iu": "Inuktitut", - "izh": "Ingrian", - "ja": "Japanese", - "jam": "Jamaican Creole English", - "jbo": "Lojban", - "jgo": "Ngomba", - "jmc": "Machame", - "jpr": "Judeo-Persian", - "jrb": "Judeo-Arabic", - "jut": "Jutish", - "jv": "Javanese", - "ka": "Georgian", - "kaa": "Kara-Kalpak", - "kab": "Kabyle", - "kac": "Kachin", - "kaj": "Jju", - "kam": "Kamba", - "kaw": "Kawi", - "kbd": "Kabardian", - "kbl": "Kanembu", - "kcg": "Tyap", - "kde": "Makonde", - "kea": "Kabuverdianu", - "ken": "Kenyang", - "kfo": "Koro", - "kg": "Kongo", - "kgp": "Kaingang", - "kha": "Khasi", - "kho": "Khotanese", - "khq": "Koyra Chiini", - "khw": "Khowar", - "ki": "Kikuyu", - "kiu": "Kirmanjki", - "kj": "Kuanyama", - "kk": "Kazakh", - "kkj": "Kako", - "kl": "Kalaallisut", - "kln": "Kalenjin", - "km": "Khmer", - "kmb": "Kimbundu", - "kn": "Kannada", - "ko": "Korean", - "koi": "Komi-Permyak", - "kok": "Konkani", - "kos": "Kosraean", - "kpe": "Kpelle", - "kr": "Kanuri", - "krc": "Karachay-Balkar", - "kri": "Krio", - "krj": "Kinaray-a", - "krl": "Karelian", - "kru": "Kurukh", - "ks": "Kashmiri", - "ksb": "Shambala", - "ksf": "Bafia", - "ksh": "Colognian", - "ku": "Kurdish", - "kum": "Kumyk", - "kut": "Kutenai", - "kv": "Komi", - "kw": "Cornish", - "ky": "Kyrgyz", - "ky-alt-variant": "Kirghiz", - "la": "Latin", - "lad": "Ladino", - "lag": "Langi", - "lah": "Lahnda", - "lam": "Lamba", - "lb": "Luxembourgish", - "lez": "Lezghian", - "lfn": "Lingua Franca Nova", - "lg": "Ganda", - "li": "Limburgish", - "lij": "Ligurian", - "liv": "Livonian", - "lkt": "Lakota", - "lmo": "Lombard", - "ln": "Lingala", - "lo": "Lao", - "lol": "Mongo", - "loz": "Lozi", - "lt": "Lithuanian", - "ltg": "Latgalian", - "lu": "Luba-Katanga", - "lua": "Luba-Lulua", - "lui": "Luiseno", - "lun": "Lunda", - "luo": "Luo", - "lus": "Mizo", - "luy": "Luyia", - "lv": "Latvian", - "lzh": "Literary Chinese", - "lzz": "Laz", - "mad": "Madurese", - "maf": "Mafa", - "mag": "Magahi", - "mai": "Maithili", - "mak": "Makasar", - "man": "Mandingo", - "mas": "Masai", - "mde": "Maba", - "mdf": "Moksha", - "mdr": "Mandar", - "men": "Mende", - "mer": "Meru", - "mfe": "Morisyen", - "mg": "Malagasy", - "mga": "Middle Irish", - "mgh": "Makhuwa-Meetto", - "mgo": "Metaʼ", - "mh": "Marshallese", - "mi": "Maori", - "mic": "Micmac", - "min": "Minangkabau", - "mk": "Macedonian", - "ml": "Malayalam", - "mn": "Mongolian", - "mnc": "Manchu", - "mni": "Manipuri", - "moh": "Mohawk", - "mos": "Mossi", - "mr": "Marathi", - "mrj": "Western Mari", - "ms": "Malay", - "mt": "Maltese", - "mua": "Mundang", - "mul": "Multiple Languages", - "mus": "Creek", - "mwl": "Mirandese", - "mwr": "Marwari", - "mwv": "Mentawai", - "my": "Burmese", - "mye": "Myene", - "myv": "Erzya", - "mzn": "Mazanderani", - "na": "Nauru", - "nan": "Min Nan Chinese", - "nap": "Neapolitan", - "naq": "Nama", - "nb": "Norwegian Bokmål", - "nd": "North Ndebele", - "nds": "Low German", - "ne": "Nepali", - "new": "Newari", - "ng": "Ndonga", - "nia": "Nias", - "niu": "Niuean", - "njo": "Ao Naga", - "nl": "Dutch", - "nl-BE": "Flemish", - "nmg": "Kwasio", - "nn": "Norwegian Nynorsk", - "nnh": "Ngiemboon", - "no": "Norwegian", - "nog": "Nogai", - "non": "Old Norse", - "nov": "Novial", - "nqo": "NʼKo", - "nr": "South Ndebele", - "nso": "Northern Sotho", - "nus": "Nuer", - "nv": "Navajo", - "nwc": "Classical Newari", - "ny": "Nyanja", - "nym": "Nyamwezi", - "nyn": "Nyankole", - "nyo": "Nyoro", - "nzi": "Nzima", - "oc": "Occitan", - "oj": "Ojibwa", - "om": "Oromo", - "or": "Oriya", - "os": "Ossetic", - "osa": "Osage", - "ota": "Ottoman Turkish", - "pa": "Punjabi", - "pag": "Pangasinan", - "pal": "Pahlavi", - "pam": "Pampanga", - "pap": "Papiamento", - "pau": "Palauan", - "pcd": "Picard", - "pdc": "Pennsylvania German", - "pdt": "Plautdietsch", - "peo": "Old Persian", - "pfl": "Palatine German", - "phn": "Phoenician", - "pi": "Pali", - "pl": "Polish", - "pms": "Piedmontese", - "pnt": "Pontic", - "pon": "Pohnpeian", - "prg": "Prussian", - "pro": "Old Provençal", - "ps": "Pashto", - "ps-alt-variant": "Pushto", - "pt": "Portuguese", - "pt-BR": "Brazilian Portuguese", - "pt-PT": "European Portuguese", - "qu": "Quechua", - "quc": "Kʼicheʼ", - "qug": "Chimborazo Highland Quichua", - "raj": "Rajasthani", - "rap": "Rapanui", - "rar": "Rarotongan", - "rgn": "Romagnol", - "rif": "Riffian", - "rm": "Romansh", - "rn": "Rundi", - "ro": "Romanian", - "ro-MD": "Moldavian", - "rof": "Rombo", - "rom": "Romany", - "root": "Root", - "rtm": "Rotuman", - "ru": "Russian", - "rue": "Rusyn", - "rug": "Roviana", - "rup": "Aromanian", - "rw": "Kinyarwanda", - "rwk": "Rwa", - "sa": "Sanskrit", - "sad": "Sandawe", - "sah": "Sakha", - "sam": "Samaritan Aramaic", - "saq": "Samburu", - "sas": "Sasak", - "sat": "Santali", - "saz": "Saurashtra", - "sba": "Ngambay", - "sbp": "Sangu", - "sc": "Sardinian", - "scn": "Sicilian", - "sco": "Scots", - "sd": "Sindhi", - "sdc": "Sassarese Sardinian", - "se": "Northern Sami", - "see": "Seneca", - "seh": "Sena", - "sei": "Seri", - "sel": "Selkup", - "ses": "Koyraboro Senni", - "sg": "Sango", - "sga": "Old Irish", - "sgs": "Samogitian", - "sh": "Serbo-Croatian", - "shi": "Tachelhit", - "shn": "Shan", - "shu": "Chadian Arabic", - "si": "Sinhala", - "sid": "Sidamo", - "sk": "Slovak", - "sl": "Slovenian", - "sli": "Lower Silesian", - "sly": "Selayar", - "sm": "Samoan", - "sma": "Southern Sami", - "smj": "Lule Sami", - "smn": "Inari Sami", - "sms": "Skolt Sami", - "sn": "Shona", - "snk": "Soninke", - "so": "Somali", - "sog": "Sogdien", - "sq": "Albanian", - "sr": "Serbian", - "srn": "Sranan Tongo", - "srr": "Serer", - "ss": "Swati", - "ssy": "Saho", - "st": "Southern Sotho", - "stq": "Saterland Frisian", - "su": "Sundanese", - "suk": "Sukuma", - "sus": "Susu", - "sux": "Sumerian", - "sv": "Swedish", - "sw": "Swahili", - "swb": "Comorian", - "swc": "Congo Swahili", - "syc": "Classical Syriac", - "syr": "Syriac", - "szl": "Silesian", - "ta": "Tamil", - "tcy": "Tulu", - "te": "Telugu", - "tem": "Timne", - "teo": "Teso", - "ter": "Tereno", - "tet": "Tetum", - "tg": "Tajik", - "th": "Thai", - "ti": "Tigrinya", - "tig": "Tigre", - "tiv": "Tiv", - "tk": "Turkmen", - "tkl": "Tokelau", - "tkr": "Tsakhur", - "tl": "Tagalog", - "tlh": "Klingon", - "tli": "Tlingit", - "tly": "Talysh", - "tmh": "Tamashek", - "tn": "Tswana", - "to": "Tongan", - "tog": "Nyasa Tonga", - "tpi": "Tok Pisin", - "tr": "Turkish", - "tru": "Turoyo", - "trv": "Taroko", - "ts": "Tsonga", - "tsd": "Tsakonian", - "tsi": "Tsimshian", - "tt": "Tatar", - "ttt": "Muslim Tat", - "tum": "Tumbuka", - "tvl": "Tuvalu", - "tw": "Twi", - "twq": "Tasawaq", - "ty": "Tahitian", - "tyv": "Tuvinian", - "tzm": "Central Atlas Tamazight", - "udm": "Udmurt", - "ug": "Uyghur", - "ug-alt-variant": "Uighur", - "uga": "Ugaritic", - "uk": "Ukrainian", - "umb": "Umbundu", - "und": "Unknown Language", - "ur": "Urdu", - "uz": "Uzbek", - "vai": "Vai", - "ve": "Venda", - "vec": "Venetian", - "vep": "Veps", - "vi": "Vietnamese", - "vls": "West Flemish", - "vmf": "Main-Franconian", - "vo": "Volapük", - "vot": "Votic", - "vro": "Võro", - "vun": "Vunjo", - "wa": "Walloon", - "wae": "Walser", - "wal": "Wolaytta", - "war": "Waray", - "was": "Washo", - "wbp": "Warlpiri", - "wo": "Wolof", - "wuu": "Wu Chinese", - "xal": "Kalmyk", - "xh": "Xhosa", - "xmf": "Mingrelian", - "xog": "Soga", - "yao": "Yao", - "yap": "Yapese", - "yav": "Yangben", - "ybb": "Yemba", - "yi": "Yiddish", - "yo": "Yoruba", - "yrl": "Nheengatu", - "yue": "Cantonese", - "za": "Zhuang", - "zap": "Zapotec", - "zbl": "Blissymbols", - "zea": "Zeelandic", - "zen": "Zenaga", - "zgh": "Standard Moroccan Tamazight", - "zh": "Chinese", - "zh-Hans": "Simplified Chinese", - "zh-Hant": "Traditional Chinese", - "zu": "Zulu", - "zun": "Zuni", - "zxx": "No linguistic content", - "zza": "Zaza" - } - } - } - } -} +{ + "main": { + "en-US": { + "identity": { + "version": { + "_number": "$Revision: 13133 $", + "_cldrVersion": "31" + }, + "language": "en", + "territory": "US" + }, + "localeDisplayNames": { + "languages": { + "aa": "Afar", + "ab": "Abkhazian", + "ace": "Achinese", + "ach": "Acoli", + "ada": "Adangme", + "ady": "Adyghe", + "ae": "Avestan", + "aeb": "Tunisian Arabic", + "af": "Afrikaans", + "afh": "Afrihili", + "agq": "Aghem", + "ain": "Ainu", + "ak": "Akan", + "akk": "Akkadian", + "akz": "Alabama", + "ale": "Aleut", + "aln": "Gheg Albanian", + "alt": "Southern Altai", + "am": "Amharic", + "an": "Aragonese", + "ang": "Old English", + "anp": "Angika", + "ar": "Arabic", + "ar-001": "Modern Standard Arabic", + "arc": "Aramaic", + "arn": "Mapuche", + "aro": "Araona", + "arp": "Arapaho", + "arq": "Algerian Arabic", + "ars": "Najdi Arabic", + "arw": "Arawak", + "ary": "Moroccan Arabic", + "arz": "Egyptian Arabic", + "as": "Assamese", + "asa": "Asu", + "ase": "American Sign Language", + "ast": "Asturian", + "av": "Avaric", + "avk": "Kotava", + "awa": "Awadhi", + "ay": "Aymara", + "az": "Azerbaijani", + "az-alt-short": "Azeri", + "ba": "Bashkir", + "bal": "Baluchi", + "ban": "Balinese", + "bar": "Bavarian", + "bas": "Basaa", + "bax": "Bamun", + "bbc": "Batak Toba", + "bbj": "Ghomala", + "be": "Belarusian", + "bej": "Beja", + "bem": "Bemba", + "bew": "Betawi", + "bez": "Bena", + "bfd": "Bafut", + "bfq": "Badaga", + "bg": "Bulgarian", + "bgn": "Western Balochi", + "bho": "Bhojpuri", + "bi": "Bislama", + "bik": "Bikol", + "bin": "Bini", + "bjn": "Banjar", + "bkm": "Kom", + "bla": "Siksika", + "bm": "Bambara", + "bn": "Bangla", + "bo": "Tibetan", + "bpy": "Bishnupriya", + "bqi": "Bakhtiari", + "br": "Breton", + "bra": "Braj", + "brh": "Brahui", + "brx": "Bodo", + "bs": "Bosnian", + "bss": "Akoose", + "bua": "Buriat", + "bug": "Buginese", + "bum": "Bulu", + "byn": "Blin", + "byv": "Medumba", + "ca": "Catalan", + "cad": "Caddo", + "car": "Carib", + "cay": "Cayuga", + "cch": "Atsam", + "ce": "Chechen", + "ceb": "Cebuano", + "cgg": "Chiga", + "ch": "Chamorro", + "chb": "Chibcha", + "chg": "Chagatai", + "chk": "Chuukese", + "chm": "Mari", + "chn": "Chinook Jargon", + "cho": "Choctaw", + "chp": "Chipewyan", + "chr": "Cherokee", + "chy": "Cheyenne", + "ckb": "Central Kurdish", + "co": "Corsican", + "cop": "Coptic", + "cps": "Capiznon", + "cr": "Cree", + "crh": "Crimean Turkish", + "crs": "Seselwa Creole French", + "cs": "Czech", + "csb": "Kashubian", + "cu": "Church Slavic", + "cv": "Chuvash", + "cy": "Welsh", + "da": "Danish", + "dak": "Dakota", + "dar": "Dargwa", + "dav": "Taita", + "de": "German", + "de-AT": "Austrian German", + "de-CH": "Swiss High German", + "del": "Delaware", + "den": "Slave", + "dgr": "Dogrib", + "din": "Dinka", + "dje": "Zarma", + "doi": "Dogri", + "dsb": "Lower Sorbian", + "dtp": "Central Dusun", + "dua": "Duala", + "dum": "Middle Dutch", + "dv": "Divehi", + "dyo": "Jola-Fonyi", + "dyu": "Dyula", + "dz": "Dzongkha", + "dzg": "Dazaga", + "ebu": "Embu", + "ee": "Ewe", + "efi": "Efik", + "egl": "Emilian", + "egy": "Ancient Egyptian", + "eka": "Ekajuk", + "el": "Greek", + "elx": "Elamite", + "en": "English", + "en-AU": "Australian English", + "en-CA": "Canadian English", + "en-GB": "British English", + "en-GB-alt-short": "UK English", + "en-US": "American English", + "en-US-alt-short": "US English", + "enm": "Middle English", + "eo": "Esperanto", + "es": "Spanish", + "es-419": "Latin American Spanish", + "es-ES": "European Spanish", + "es-MX": "Mexican Spanish", + "esu": "Central Yupik", + "et": "Estonian", + "eu": "Basque", + "ewo": "Ewondo", + "ext": "Extremaduran", + "fa": "Persian", + "fa-AF": "Dari", + "fan": "Fang", + "fat": "Fanti", + "ff": "Fulah", + "fi": "Finnish", + "fil": "Filipino", + "fit": "Tornedalen Finnish", + "fj": "Fijian", + "fo": "Faroese", + "fon": "Fon", + "fr": "French", + "fr-CA": "Canadian French", + "fr-CH": "Swiss French", + "frc": "Cajun French", + "frm": "Middle French", + "fro": "Old French", + "frp": "Arpitan", + "frr": "Northern Frisian", + "frs": "Eastern Frisian", + "fur": "Friulian", + "fy": "Western Frisian", + "ga": "Irish", + "gaa": "Ga", + "gag": "Gagauz", + "gan": "Gan Chinese", + "gay": "Gayo", + "gba": "Gbaya", + "gbz": "Zoroastrian Dari", + "gd": "Scottish Gaelic", + "gez": "Geez", + "gil": "Gilbertese", + "gl": "Galician", + "glk": "Gilaki", + "gmh": "Middle High German", + "gn": "Guarani", + "goh": "Old High German", + "gom": "Goan Konkani", + "gon": "Gondi", + "gor": "Gorontalo", + "got": "Gothic", + "grb": "Grebo", + "grc": "Ancient Greek", + "gsw": "Swiss German", + "gu": "Gujarati", + "guc": "Wayuu", + "gur": "Frafra", + "guz": "Gusii", + "gv": "Manx", + "gwi": "Gwichʼin", + "ha": "Hausa", + "hai": "Haida", + "hak": "Hakka Chinese", + "haw": "Hawaiian", + "he": "Hebrew", + "hi": "Hindi", + "hif": "Fiji Hindi", + "hil": "Hiligaynon", + "hit": "Hittite", + "hmn": "Hmong", + "ho": "Hiri Motu", + "hr": "Croatian", + "hsb": "Upper Sorbian", + "hsn": "Xiang Chinese", + "ht": "Haitian Creole", + "hu": "Hungarian", + "hup": "Hupa", + "hy": "Armenian", + "hz": "Herero", + "ia": "Interlingua", + "iba": "Iban", + "ibb": "Ibibio", + "id": "Indonesian", + "ie": "Interlingue", + "ig": "Igbo", + "ii": "Sichuan Yi", + "ik": "Inupiaq", + "ilo": "Iloko", + "inh": "Ingush", + "io": "Ido", + "is": "Icelandic", + "it": "Italian", + "iu": "Inuktitut", + "izh": "Ingrian", + "ja": "Japanese", + "jam": "Jamaican Creole English", + "jbo": "Lojban", + "jgo": "Ngomba", + "jmc": "Machame", + "jpr": "Judeo-Persian", + "jrb": "Judeo-Arabic", + "jut": "Jutish", + "jv": "Javanese", + "ka": "Georgian", + "kaa": "Kara-Kalpak", + "kab": "Kabyle", + "kac": "Kachin", + "kaj": "Jju", + "kam": "Kamba", + "kaw": "Kawi", + "kbd": "Kabardian", + "kbl": "Kanembu", + "kcg": "Tyap", + "kde": "Makonde", + "kea": "Kabuverdianu", + "ken": "Kenyang", + "kfo": "Koro", + "kg": "Kongo", + "kgp": "Kaingang", + "kha": "Khasi", + "kho": "Khotanese", + "khq": "Koyra Chiini", + "khw": "Khowar", + "ki": "Kikuyu", + "kiu": "Kirmanjki", + "kj": "Kuanyama", + "kk": "Kazakh", + "kkj": "Kako", + "kl": "Kalaallisut", + "kln": "Kalenjin", + "km": "Khmer", + "kmb": "Kimbundu", + "kn": "Kannada", + "ko": "Korean", + "koi": "Komi-Permyak", + "kok": "Konkani", + "kos": "Kosraean", + "kpe": "Kpelle", + "kr": "Kanuri", + "krc": "Karachay-Balkar", + "kri": "Krio", + "krj": "Kinaray-a", + "krl": "Karelian", + "kru": "Kurukh", + "ks": "Kashmiri", + "ksb": "Shambala", + "ksf": "Bafia", + "ksh": "Colognian", + "ku": "Kurdish", + "kum": "Kumyk", + "kut": "Kutenai", + "kv": "Komi", + "kw": "Cornish", + "ky": "Kyrgyz", + "ky-alt-variant": "Kirghiz", + "la": "Latin", + "lad": "Ladino", + "lag": "Langi", + "lah": "Lahnda", + "lam": "Lamba", + "lb": "Luxembourgish", + "lez": "Lezghian", + "lfn": "Lingua Franca Nova", + "lg": "Ganda", + "li": "Limburgish", + "lij": "Ligurian", + "liv": "Livonian", + "lkt": "Lakota", + "lmo": "Lombard", + "ln": "Lingala", + "lo": "Lao", + "lol": "Mongo", + "loz": "Lozi", + "lrc": "Northern Luri", + "lt": "Lithuanian", + "ltg": "Latgalian", + "lu": "Luba-Katanga", + "lua": "Luba-Lulua", + "lui": "Luiseno", + "lun": "Lunda", + "luo": "Luo", + "lus": "Mizo", + "luy": "Luyia", + "lv": "Latvian", + "lzh": "Literary Chinese", + "lzz": "Laz", + "mad": "Madurese", + "maf": "Mafa", + "mag": "Magahi", + "mai": "Maithili", + "mak": "Makasar", + "man": "Mandingo", + "mas": "Masai", + "mde": "Maba", + "mdf": "Moksha", + "mdr": "Mandar", + "men": "Mende", + "mer": "Meru", + "mfe": "Morisyen", + "mg": "Malagasy", + "mga": "Middle Irish", + "mgh": "Makhuwa-Meetto", + "mgo": "Metaʼ", + "mh": "Marshallese", + "mi": "Maori", + "mic": "Mi'kmaq", + "min": "Minangkabau", + "mk": "Macedonian", + "ml": "Malayalam", + "mn": "Mongolian", + "mnc": "Manchu", + "mni": "Manipuri", + "moh": "Mohawk", + "mos": "Mossi", + "mr": "Marathi", + "mrj": "Western Mari", + "ms": "Malay", + "mt": "Maltese", + "mua": "Mundang", + "mul": "Multiple languages", + "mus": "Creek", + "mwl": "Mirandese", + "mwr": "Marwari", + "mwv": "Mentawai", + "my": "Burmese", + "my-alt-variant": "Myanmar Language", + "mye": "Myene", + "myv": "Erzya", + "mzn": "Mazanderani", + "na": "Nauru", + "nan": "Min Nan Chinese", + "nap": "Neapolitan", + "naq": "Nama", + "nb": "Norwegian Bokmål", + "nd": "North Ndebele", + "nds": "Low German", + "nds-NL": "Low Saxon", + "ne": "Nepali", + "new": "Newari", + "ng": "Ndonga", + "nia": "Nias", + "niu": "Niuean", + "njo": "Ao Naga", + "nl": "Dutch", + "nl-BE": "Flemish", + "nmg": "Kwasio", + "nn": "Norwegian Nynorsk", + "nnh": "Ngiemboon", + "no": "Norwegian", + "nog": "Nogai", + "non": "Old Norse", + "nov": "Novial", + "nqo": "N’Ko", + "nr": "South Ndebele", + "nso": "Northern Sotho", + "nus": "Nuer", + "nv": "Navajo", + "nwc": "Classical Newari", + "ny": "Nyanja", + "nym": "Nyamwezi", + "nyn": "Nyankole", + "nyo": "Nyoro", + "nzi": "Nzima", + "oc": "Occitan", + "oj": "Ojibwa", + "om": "Oromo", + "or": "Odia", + "os": "Ossetic", + "osa": "Osage", + "ota": "Ottoman Turkish", + "pa": "Punjabi", + "pag": "Pangasinan", + "pal": "Pahlavi", + "pam": "Pampanga", + "pap": "Papiamento", + "pau": "Palauan", + "pcd": "Picard", + "pcm": "Nigerian Pidgin", + "pdc": "Pennsylvania German", + "pdt": "Plautdietsch", + "peo": "Old Persian", + "pfl": "Palatine German", + "phn": "Phoenician", + "pi": "Pali", + "pl": "Polish", + "pms": "Piedmontese", + "pnt": "Pontic", + "pon": "Pohnpeian", + "prg": "Prussian", + "pro": "Old Provençal", + "ps": "Pashto", + "ps-alt-variant": "Pushto", + "pt": "Portuguese", + "pt-BR": "Brazilian Portuguese", + "pt-PT": "European Portuguese", + "qu": "Quechua", + "quc": "Kʼicheʼ", + "qug": "Chimborazo Highland Quichua", + "raj": "Rajasthani", + "rap": "Rapanui", + "rar": "Rarotongan", + "rgn": "Romagnol", + "rif": "Riffian", + "rm": "Romansh", + "rn": "Rundi", + "ro": "Romanian", + "ro-MD": "Moldavian", + "rof": "Rombo", + "rom": "Romany", + "root": "Root", + "rtm": "Rotuman", + "ru": "Russian", + "rue": "Rusyn", + "rug": "Roviana", + "rup": "Aromanian", + "rw": "Kinyarwanda", + "rwk": "Rwa", + "sa": "Sanskrit", + "sad": "Sandawe", + "sah": "Sakha", + "sam": "Samaritan Aramaic", + "saq": "Samburu", + "sas": "Sasak", + "sat": "Santali", + "saz": "Saurashtra", + "sba": "Ngambay", + "sbp": "Sangu", + "sc": "Sardinian", + "scn": "Sicilian", + "sco": "Scots", + "sd": "Sindhi", + "sdc": "Sassarese Sardinian", + "sdh": "Southern Kurdish", + "se": "Northern Sami", + "see": "Seneca", + "seh": "Sena", + "sei": "Seri", + "sel": "Selkup", + "ses": "Koyraboro Senni", + "sg": "Sango", + "sga": "Old Irish", + "sgs": "Samogitian", + "sh": "Serbo-Croatian", + "shi": "Tachelhit", + "shn": "Shan", + "shu": "Chadian Arabic", + "si": "Sinhala", + "sid": "Sidamo", + "sk": "Slovak", + "sl": "Slovenian", + "sli": "Lower Silesian", + "sly": "Selayar", + "sm": "Samoan", + "sma": "Southern Sami", + "smj": "Lule Sami", + "smn": "Inari Sami", + "sms": "Skolt Sami", + "sn": "Shona", + "snk": "Soninke", + "so": "Somali", + "sog": "Sogdien", + "sq": "Albanian", + "sr": "Serbian", + "srn": "Sranan Tongo", + "srr": "Serer", + "ss": "Swati", + "ssy": "Saho", + "st": "Southern Sotho", + "stq": "Saterland Frisian", + "su": "Sundanese", + "suk": "Sukuma", + "sus": "Susu", + "sux": "Sumerian", + "sv": "Swedish", + "sw": "Swahili", + "sw-CD": "Congo Swahili", + "swb": "Comorian", + "syc": "Classical Syriac", + "syr": "Syriac", + "szl": "Silesian", + "ta": "Tamil", + "tcy": "Tulu", + "te": "Telugu", + "tem": "Timne", + "teo": "Teso", + "ter": "Tereno", + "tet": "Tetum", + "tg": "Tajik", + "th": "Thai", + "ti": "Tigrinya", + "tig": "Tigre", + "tiv": "Tiv", + "tk": "Turkmen", + "tkl": "Tokelau", + "tkr": "Tsakhur", + "tl": "Tagalog", + "tlh": "Klingon", + "tli": "Tlingit", + "tly": "Talysh", + "tmh": "Tamashek", + "tn": "Tswana", + "to": "Tongan", + "tog": "Nyasa Tonga", + "tpi": "Tok Pisin", + "tr": "Turkish", + "tru": "Turoyo", + "trv": "Taroko", + "ts": "Tsonga", + "tsd": "Tsakonian", + "tsi": "Tsimshian", + "tt": "Tatar", + "ttt": "Muslim Tat", + "tum": "Tumbuka", + "tvl": "Tuvalu", + "tw": "Twi", + "twq": "Tasawaq", + "ty": "Tahitian", + "tyv": "Tuvinian", + "tzm": "Central Atlas Tamazight", + "udm": "Udmurt", + "ug": "Uyghur", + "ug-alt-variant": "Uighur", + "uga": "Ugaritic", + "uk": "Ukrainian", + "umb": "Umbundu", + "und": "Unknown language", + "ur": "Urdu", + "uz": "Uzbek", + "vai": "Vai", + "ve": "Venda", + "vec": "Venetian", + "vep": "Veps", + "vi": "Vietnamese", + "vls": "West Flemish", + "vmf": "Main-Franconian", + "vo": "Volapük", + "vot": "Votic", + "vro": "Võro", + "vun": "Vunjo", + "wa": "Walloon", + "wae": "Walser", + "wal": "Wolaytta", + "war": "Waray", + "was": "Washo", + "wbp": "Warlpiri", + "wo": "Wolof", + "wuu": "Wu Chinese", + "xal": "Kalmyk", + "xh": "Xhosa", + "xmf": "Mingrelian", + "xog": "Soga", + "yao": "Yao", + "yap": "Yapese", + "yav": "Yangben", + "ybb": "Yemba", + "yi": "Yiddish", + "yo": "Yoruba", + "yrl": "Nheengatu", + "yue": "Cantonese", + "za": "Zhuang", + "zap": "Zapotec", + "zbl": "Blissymbols", + "zea": "Zeelandic", + "zen": "Zenaga", + "zgh": "Standard Moroccan Tamazight", + "zh": "Chinese", + "zh-alt-long": "Mandarin Chinese", + "zh-Hans": "Simplified Chinese", + "zh-Hant": "Traditional Chinese", + "zu": "Zulu", + "zun": "Zuni", + "zxx": "No linguistic content", + "zza": "Zaza" + } + } + } + } +} diff --git a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/scripts.json b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/scripts.json index 83185ede..315db5b1 100644 --- a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/scripts.json +++ b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/scripts.json @@ -1,239 +1,198 @@ -{ - "main": { - "en-US": { - "identity": { - "version": { - "_cldrVersion": "27", - "_number": "$Revision: 10669 $" - }, - "generation": { - "_date": "$Date: 2014-07-23 16:10:33 -0500 (Wed, 23 Jul 2014) $" - }, - "language": "en", - "territory": "US" - }, - "localeDisplayNames": { - "scripts": { - "Afak": "Afaka", - "Aghb": "Caucasian Albanian", - "Arab": "Arabic", - "Arab-alt-variant": "Perso-Arabic", - "Armi": "Imperial Aramaic", - "Armn": "Armenian", - "Avst": "Avestan", - "Bali": "Balinese", - "Bamu": "Bamum", - "Bass": "Bassa Vah", - "Batk": "Batak", - "Beng": "Bengali", - "Blis": "Blissymbols", - "Bopo": "Bopomofo", - "Brah": "Brahmi", - "Brai": "Braille", - "Bugi": "Buginese", - "Buhd": "Buhid", - "Cakm": "Chakma", - "Cans": "Unified Canadian Aboriginal Syllabics", - "Cans-alt-short": "UCAS", - "Cari": "Carian", - "Cham": "Cham", - "Cher": "Cherokee", - "Cirt": "Cirth", - "Copt": "Coptic", - "Cprt": "Cypriot", - "Cyrl": "Cyrillic", - "Cyrs": "Old Church Slavonic Cyrillic", - "Deva": "Devanagari", - "Dsrt": "Deseret", - "Dupl": "Duployan shorthand", - "Egyd": "Egyptian demotic", - "Egyh": "Egyptian hieratic", - "Egyp": "Egyptian hieroglyphs", - "Elba": "Elbasan", - "Ethi": "Ethiopic", - "Geok": "Georgian Khutsuri", - "Geor": "Georgian", - "Glag": "Glagolitic", - "Goth": "Gothic", - "Gran": "Grantha", - "Grek": "Greek", - "Gujr": "Gujarati", - "Guru": "Gurmukhi", - "Hang": "Hangul", - "Hani": "Han", - "Hano": "Hanunoo", - "Hans": "Simplified", - "Hans-alt-stand-alone": "Simplified Han", - "Hant": "Traditional", - "Hant-alt-stand-alone": "Traditional Han", - "Hebr": "Hebrew", - "Hira": "Hiragana", - "Hluw": "Anatolian Hieroglyphs", - "Hmng": "Pahawh Hmong", - "Hrkt": "Japanese syllabaries", - "Hung": "Old Hungarian", - "Inds": "Indus", - "Ital": "Old Italic", - "Java": "Javanese", - "Jpan": "Japanese", - "Jurc": "Jurchen", - "Kali": "Kayah Li", - "Kana": "Katakana", - "Khar": "Kharoshthi", - "Khmr": "Khmer", - "Khoj": "Khojki", - "Knda": "Kannada", - "Kore": "Korean", - "Kpel": "Kpelle", - "Kthi": "Kaithi", - "Lana": "Lanna", - "Laoo": "Lao", - "Latf": "Fraktur Latin", - "Latg": "Gaelic Latin", - "Latn": "Latin", - "Lepc": "Lepcha", - "Limb": "Limbu", - "Lina": "Linear A", - "Linb": "Linear B", - "Lisu": "Fraser", - "Loma": "Loma", - "Lyci": "Lycian", - "Lydi": "Lydian", - "Mahj": "Mahajani", - "Mand": "Mandaean", - "Mani": "Manichaean", - "Maya": "Mayan hieroglyphs", - "Mend": "Mende", - "Merc": "Meroitic Cursive", - "Mero": "Meroitic", - "Mlym": "Malayalam", - "Modi": "Modi", - "Mong": "Mongolian", - "Moon": "Moon", - "Mroo": "Mro", - "Mtei": "Meitei Mayek", - "Mymr": "Myanmar", - "Narb": "Old North Arabian", - "Nbat": "Nabataean", - "Nkgb": "Naxi Geba", - "Nkoo": "N’Ko", - "Nshu": "Nüshu", - "Ogam": "Ogham", - "Olck": "Ol Chiki", - "Orkh": "Orkhon", - "Orya": "Oriya", - "Osma": "Osmanya", - "Palm": "Palmyrene", - "Pauc": "Pau Cin Hau", - "Perm": "Old Permic", - "Phag": "Phags-pa", - "Phli": "Inscriptional Pahlavi", - "Phlp": "Psalter Pahlavi", - "Phlv": "Book Pahlavi", - "Phnx": "Phoenician", - "Plrd": "Pollard Phonetic", - "Prti": "Inscriptional Parthian", - "Qaaa": "Qaaa", - "Qaab": "Qaab", - "Qaac": "Qaac", - "Qaad": "Qaad", - "Qaae": "Qaae", - "Qaaf": "Qaaf", - "Qaag": "Qaag", - "Qaah": "Qaah", - "Qaaj": "Qaaj", - "Qaak": "Qaak", - "Qaal": "Qaal", - "Qaam": "Qaam", - "Qaan": "Qaan", - "Qaao": "Qaao", - "Qaap": "Qaap", - "Qaaq": "Qaaq", - "Qaar": "Qaar", - "Qaas": "Qaas", - "Qaat": "Qaat", - "Qaau": "Qaau", - "Qaav": "Qaav", - "Qaaw": "Qaaw", - "Qaax": "Qaax", - "Qaay": "Qaay", - "Qaaz": "Qaaz", - "Qaba": "Qaba", - "Qabb": "Qabb", - "Qabc": "Qabc", - "Qabd": "Qabd", - "Qabe": "Qabe", - "Qabf": "Qabf", - "Qabg": "Qabg", - "Qabh": "Qabh", - "Qabi": "Qabi", - "Qabj": "Qabj", - "Qabk": "Qabk", - "Qabl": "Qabl", - "Qabm": "Qabm", - "Qabn": "Qabn", - "Qabo": "Qabo", - "Qabp": "Qabp", - "Qabq": "Qabq", - "Qabr": "Qabr", - "Qabs": "Qabs", - "Qabt": "Qabt", - "Qabu": "Qabu", - "Qabv": "Qabv", - "Qabw": "Qabw", - "Qabx": "Qabx", - "Rjng": "Rejang", - "Roro": "Rongorongo", - "Runr": "Runic", - "Samr": "Samaritan", - "Sara": "Sarati", - "Sarb": "Old South Arabian", - "Saur": "Saurashtra", - "Sgnw": "SignWriting", - "Shaw": "Shavian", - "Shrd": "Sharada", - "Sidd": "Siddham", - "Sind": "Khudawadi", - "Sinh": "Sinhala", - "Sora": "Sora Sompeng", - "Sund": "Sundanese", - "Sylo": "Syloti Nagri", - "Syrc": "Syriac", - "Syre": "Estrangelo Syriac", - "Syrj": "Western Syriac", - "Syrn": "Eastern Syriac", - "Tagb": "Tagbanwa", - "Takr": "Takri", - "Tale": "Tai Le", - "Talu": "New Tai Lue", - "Taml": "Tamil", - "Tang": "Tangut", - "Tavt": "Tai Viet", - "Telu": "Telugu", - "Teng": "Tengwar", - "Tfng": "Tifinagh", - "Tglg": "Tagalog", - "Thaa": "Thaana", - "Thai": "Thai", - "Tibt": "Tibetan", - "Tirh": "Tirhuta", - "Ugar": "Ugaritic", - "Vaii": "Vai", - "Visp": "Visible Speech", - "Wara": "Varang Kshiti", - "Wole": "Woleai", - "Xpeo": "Old Persian", - "Xsux": "Sumero-Akkadian Cuneiform", - "Xsux-alt-short": "S-A Cuneiform", - "Yiii": "Yi", - "Zinh": "Inherited", - "Zmth": "Mathematical Notation", - "Zsym": "Symbols", - "Zxxx": "Unwritten", - "Zyyy": "Common", - "Zzzz": "Unknown Script" - } - } - } - } -} +{ + "main": { + "en-US": { + "identity": { + "version": { + "_number": "$Revision: 13133 $", + "_cldrVersion": "31" + }, + "language": "en", + "territory": "US" + }, + "localeDisplayNames": { + "scripts": { + "Adlm": "Adlam", + "Afak": "Afaka", + "Aghb": "Caucasian Albanian", + "Ahom": "Ahom", + "Arab": "Arabic", + "Arab-alt-variant": "Perso-Arabic", + "Armi": "Imperial Aramaic", + "Armn": "Armenian", + "Avst": "Avestan", + "Bali": "Balinese", + "Bamu": "Bamum", + "Bass": "Bassa Vah", + "Batk": "Batak", + "Beng": "Bangla", + "Bhks": "Bhaiksuki", + "Blis": "Blissymbols", + "Bopo": "Bopomofo", + "Brah": "Brahmi", + "Brai": "Braille", + "Bugi": "Buginese", + "Buhd": "Buhid", + "Cakm": "Chakma", + "Cans": "Unified Canadian Aboriginal Syllabics", + "Cans-alt-short": "UCAS", + "Cari": "Carian", + "Cham": "Cham", + "Cher": "Cherokee", + "Cirt": "Cirth", + "Copt": "Coptic", + "Cprt": "Cypriot", + "Cyrl": "Cyrillic", + "Cyrs": "Old Church Slavonic Cyrillic", + "Deva": "Devanagari", + "Dsrt": "Deseret", + "Dupl": "Duployan shorthand", + "Egyd": "Egyptian demotic", + "Egyh": "Egyptian hieratic", + "Egyp": "Egyptian hieroglyphs", + "Elba": "Elbasan", + "Ethi": "Ethiopic", + "Geok": "Georgian Khutsuri", + "Geor": "Georgian", + "Glag": "Glagolitic", + "Goth": "Gothic", + "Gran": "Grantha", + "Grek": "Greek", + "Gujr": "Gujarati", + "Guru": "Gurmukhi", + "Hanb": "Han with Bopomofo", + "Hang": "Hangul", + "Hani": "Han", + "Hano": "Hanunoo", + "Hans": "Simplified", + "Hans-alt-stand-alone": "Simplified Han", + "Hant": "Traditional", + "Hant-alt-stand-alone": "Traditional Han", + "Hatr": "Hatran", + "Hebr": "Hebrew", + "Hira": "Hiragana", + "Hluw": "Anatolian Hieroglyphs", + "Hmng": "Pahawh Hmong", + "Hrkt": "Japanese syllabaries", + "Hung": "Old Hungarian", + "Inds": "Indus", + "Ital": "Old Italic", + "Jamo": "Jamo", + "Java": "Javanese", + "Jpan": "Japanese", + "Jurc": "Jurchen", + "Kali": "Kayah Li", + "Kana": "Katakana", + "Khar": "Kharoshthi", + "Khmr": "Khmer", + "Khoj": "Khojki", + "Knda": "Kannada", + "Kore": "Korean", + "Kpel": "Kpelle", + "Kthi": "Kaithi", + "Lana": "Lanna", + "Laoo": "Lao", + "Latf": "Fraktur Latin", + "Latg": "Gaelic Latin", + "Latn": "Latin", + "Lepc": "Lepcha", + "Limb": "Limbu", + "Lina": "Linear A", + "Linb": "Linear B", + "Lisu": "Fraser", + "Loma": "Loma", + "Lyci": "Lycian", + "Lydi": "Lydian", + "Mahj": "Mahajani", + "Mand": "Mandaean", + "Mani": "Manichaean", + "Marc": "Marchen", + "Maya": "Mayan hieroglyphs", + "Mend": "Mende", + "Merc": "Meroitic Cursive", + "Mero": "Meroitic", + "Mlym": "Malayalam", + "Modi": "Modi", + "Mong": "Mongolian", + "Moon": "Moon", + "Mroo": "Mro", + "Mtei": "Meitei Mayek", + "Mult": "Multani", + "Mymr": "Myanmar", + "Narb": "Old North Arabian", + "Nbat": "Nabataean", + "Newa": "Newa", + "Nkgb": "Naxi Geba", + "Nkoo": "N’Ko", + "Nshu": "Nüshu", + "Ogam": "Ogham", + "Olck": "Ol Chiki", + "Orkh": "Orkhon", + "Orya": "Odia", + "Osge": "Osage", + "Osma": "Osmanya", + "Palm": "Palmyrene", + "Pauc": "Pau Cin Hau", + "Perm": "Old Permic", + "Phag": "Phags-pa", + "Phli": "Inscriptional Pahlavi", + "Phlp": "Psalter Pahlavi", + "Phlv": "Book Pahlavi", + "Phnx": "Phoenician", + "Plrd": "Pollard Phonetic", + "Prti": "Inscriptional Parthian", + "Rjng": "Rejang", + "Roro": "Rongorongo", + "Runr": "Runic", + "Samr": "Samaritan", + "Sara": "Sarati", + "Sarb": "Old South Arabian", + "Saur": "Saurashtra", + "Sgnw": "SignWriting", + "Shaw": "Shavian", + "Shrd": "Sharada", + "Sidd": "Siddham", + "Sind": "Khudawadi", + "Sinh": "Sinhala", + "Sora": "Sora Sompeng", + "Sund": "Sundanese", + "Sylo": "Syloti Nagri", + "Syrc": "Syriac", + "Syre": "Estrangelo Syriac", + "Syrj": "Western Syriac", + "Syrn": "Eastern Syriac", + "Tagb": "Tagbanwa", + "Takr": "Takri", + "Tale": "Tai Le", + "Talu": "New Tai Lue", + "Taml": "Tamil", + "Tang": "Tangut", + "Tavt": "Tai Viet", + "Telu": "Telugu", + "Teng": "Tengwar", + "Tfng": "Tifinagh", + "Tglg": "Tagalog", + "Thaa": "Thaana", + "Thai": "Thai", + "Tibt": "Tibetan", + "Tirh": "Tirhuta", + "Ugar": "Ugaritic", + "Vaii": "Vai", + "Visp": "Visible Speech", + "Wara": "Varang Kshiti", + "Wole": "Woleai", + "Xpeo": "Old Persian", + "Xsux": "Sumero-Akkadian Cuneiform", + "Xsux-alt-short": "S-A Cuneiform", + "Yiii": "Yi", + "Zinh": "Inherited", + "Zmth": "Mathematical Notation", + "Zsye": "Emoji", + "Zsym": "Symbols", + "Zxxx": "Unwritten", + "Zyyy": "Common", + "Zzzz": "Unknown Script" + } + } + } + } +} diff --git a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/territories.json b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/territories.json index c2c9ce17..7427e665 100644 --- a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/territories.json +++ b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/territories.json @@ -1,324 +1,324 @@ -{ - "main": { - "en-US": { - "identity": { - "version": { - "_cldrVersion": "27", - "_number": "$Revision: 10669 $" - }, - "generation": { - "_date": "$Date: 2014-07-23 16:10:33 -0500 (Wed, 23 Jul 2014) $" - }, - "language": "en", - "territory": "US" - }, - "localeDisplayNames": { - "territories": { - "001": "World", - "002": "Africa", - "003": "North America", - "005": "South America", - "009": "Oceania", - "011": "Western Africa", - "013": "Central America", - "014": "Eastern Africa", - "015": "Northern Africa", - "017": "Middle Africa", - "018": "Southern Africa", - "019": "Americas", - "021": "Northern America", - "029": "Caribbean", - "030": "Eastern Asia", - "034": "Southern Asia", - "035": "Southeast Asia", - "039": "Southern Europe", - "053": "Australasia", - "054": "Melanesia", - "057": "Micronesian Region", - "061": "Polynesia", - "142": "Asia", - "143": "Central Asia", - "145": "Western Asia", - "150": "Europe", - "151": "Eastern Europe", - "154": "Northern Europe", - "155": "Western Europe", - "419": "Latin America", - "AC": "Ascension Island", - "AD": "Andorra", - "AE": "United Arab Emirates", - "AF": "Afghanistan", - "AG": "Antigua & Barbuda", - "AI": "Anguilla", - "AL": "Albania", - "AM": "Armenia", - "AN": "Netherlands Antilles", - "AO": "Angola", - "AQ": "Antarctica", - "AR": "Argentina", - "AS": "American Samoa", - "AT": "Austria", - "AU": "Australia", - "AW": "Aruba", - "AX": "Åland Islands", - "AZ": "Azerbaijan", - "BA": "Bosnia & Herzegovina", - "BA-alt-short": "Bosnia", - "BB": "Barbados", - "BD": "Bangladesh", - "BE": "Belgium", - "BF": "Burkina Faso", - "BG": "Bulgaria", - "BH": "Bahrain", - "BI": "Burundi", - "BJ": "Benin", - "BL": "St. Barthélemy", - "BM": "Bermuda", - "BN": "Brunei", - "BO": "Bolivia", - "BQ": "Caribbean Netherlands", - "BR": "Brazil", - "BS": "Bahamas", - "BT": "Bhutan", - "BV": "Bouvet Island", - "BW": "Botswana", - "BY": "Belarus", - "BZ": "Belize", - "CA": "Canada", - "CC": "Cocos (Keeling) Islands", - "CD": "Congo - Kinshasa", - "CD-alt-variant": "Congo (DRC)", - "CF": "Central African Republic", - "CG": "Congo - Brazzaville", - "CG-alt-variant": "Congo (Republic)", - "CH": "Switzerland", - "CI": "Côte d’Ivoire", - "CI-alt-variant": "Ivory Coast", - "CK": "Cook Islands", - "CL": "Chile", - "CM": "Cameroon", - "CN": "China", - "CO": "Colombia", - "CP": "Clipperton Island", - "CR": "Costa Rica", - "CU": "Cuba", - "CV": "Cape Verde", - "CW": "Curaçao", - "CX": "Christmas Island", - "CY": "Cyprus", - "CZ": "Czech Republic", - "DE": "Germany", - "DG": "Diego Garcia", - "DJ": "Djibouti", - "DK": "Denmark", - "DM": "Dominica", - "DO": "Dominican Republic", - "DZ": "Algeria", - "EA": "Ceuta & Melilla", - "EC": "Ecuador", - "EE": "Estonia", - "EG": "Egypt", - "EH": "Western Sahara", - "ER": "Eritrea", - "ES": "Spain", - "ET": "Ethiopia", - "EU": "European Union", - "FI": "Finland", - "FJ": "Fiji", - "FK": "Falkland Islands", - "FK-alt-variant": "Falkland Islands (Islas Malvinas)", - "FM": "Micronesia", - "FO": "Faroe Islands", - "FR": "France", - "GA": "Gabon", - "GB": "United Kingdom", - "GB-alt-short": "UK", - "GD": "Grenada", - "GE": "Georgia", - "GF": "French Guiana", - "GG": "Guernsey", - "GH": "Ghana", - "GI": "Gibraltar", - "GL": "Greenland", - "GM": "Gambia", - "GN": "Guinea", - "GP": "Guadeloupe", - "GQ": "Equatorial Guinea", - "GR": "Greece", - "GS": "South Georgia & South Sandwich Islands", - "GT": "Guatemala", - "GU": "Guam", - "GW": "Guinea-Bissau", - "GY": "Guyana", - "HK": "Hong Kong SAR China", - "HK-alt-short": "Hong Kong", - "HM": "Heard & McDonald Islands", - "HN": "Honduras", - "HR": "Croatia", - "HT": "Haiti", - "HU": "Hungary", - "IC": "Canary Islands", - "ID": "Indonesia", - "IE": "Ireland", - "IL": "Israel", - "IM": "Isle of Man", - "IN": "India", - "IO": "British Indian Ocean Territory", - "IQ": "Iraq", - "IR": "Iran", - "IS": "Iceland", - "IT": "Italy", - "JE": "Jersey", - "JM": "Jamaica", - "JO": "Jordan", - "JP": "Japan", - "KE": "Kenya", - "KG": "Kyrgyzstan", - "KH": "Cambodia", - "KI": "Kiribati", - "KM": "Comoros", - "KN": "St. Kitts & Nevis", - "KP": "North Korea", - "KR": "South Korea", - "KW": "Kuwait", - "KY": "Cayman Islands", - "KZ": "Kazakhstan", - "LA": "Laos", - "LB": "Lebanon", - "LC": "St. Lucia", - "LI": "Liechtenstein", - "LK": "Sri Lanka", - "LR": "Liberia", - "LS": "Lesotho", - "LT": "Lithuania", - "LU": "Luxembourg", - "LV": "Latvia", - "LY": "Libya", - "MA": "Morocco", - "MC": "Monaco", - "MD": "Moldova", - "ME": "Montenegro", - "MF": "St. Martin", - "MG": "Madagascar", - "MH": "Marshall Islands", - "MK": "Macedonia", - "MK-alt-variant": "Macedonia (FYROM)", - "ML": "Mali", - "MM": "Myanmar (Burma)", - "MM-alt-short": "Myanmar", - "MN": "Mongolia", - "MO": "Macau SAR China", - "MO-alt-short": "Macau", - "MP": "Northern Mariana Islands", - "MQ": "Martinique", - "MR": "Mauritania", - "MS": "Montserrat", - "MT": "Malta", - "MU": "Mauritius", - "MV": "Maldives", - "MW": "Malawi", - "MX": "Mexico", - "MY": "Malaysia", - "MZ": "Mozambique", - "NA": "Namibia", - "NC": "New Caledonia", - "NE": "Niger", - "NF": "Norfolk Island", - "NG": "Nigeria", - "NI": "Nicaragua", - "NL": "Netherlands", - "NO": "Norway", - "NP": "Nepal", - "NR": "Nauru", - "NU": "Niue", - "NZ": "New Zealand", - "OM": "Oman", - "PA": "Panama", - "PE": "Peru", - "PF": "French Polynesia", - "PG": "Papua New Guinea", - "PH": "Philippines", - "PK": "Pakistan", - "PL": "Poland", - "PM": "St. Pierre & Miquelon", - "PN": "Pitcairn Islands", - "PR": "Puerto Rico", - "PS": "Palestinian Territories", - "PS-alt-short": "Palestine", - "PT": "Portugal", - "PW": "Palau", - "PY": "Paraguay", - "QA": "Qatar", - "QO": "Outlying Oceania", - "RE": "Réunion", - "RO": "Romania", - "RS": "Serbia", - "RU": "Russia", - "RW": "Rwanda", - "SA": "Saudi Arabia", - "SB": "Solomon Islands", - "SC": "Seychelles", - "SD": "Sudan", - "SE": "Sweden", - "SG": "Singapore", - "SH": "St. Helena", - "SI": "Slovenia", - "SJ": "Svalbard & Jan Mayen", - "SK": "Slovakia", - "SL": "Sierra Leone", - "SM": "San Marino", - "SN": "Senegal", - "SO": "Somalia", - "SR": "Suriname", - "SS": "South Sudan", - "ST": "São Tomé & Príncipe", - "SV": "El Salvador", - "SX": "Sint Maarten", - "SY": "Syria", - "SZ": "Swaziland", - "TA": "Tristan da Cunha", - "TC": "Turks & Caicos Islands", - "TD": "Chad", - "TF": "French Southern Territories", - "TG": "Togo", - "TH": "Thailand", - "TJ": "Tajikistan", - "TK": "Tokelau", - "TL": "Timor-Leste", - "TL-alt-variant": "East Timor", - "TM": "Turkmenistan", - "TN": "Tunisia", - "TO": "Tonga", - "TR": "Turkey", - "TT": "Trinidad & Tobago", - "TV": "Tuvalu", - "TW": "Taiwan", - "TZ": "Tanzania", - "UA": "Ukraine", - "UG": "Uganda", - "UM": "U.S. Outlying Islands", - "US": "United States", - "US-alt-short": "US", - "UY": "Uruguay", - "UZ": "Uzbekistan", - "VA": "Vatican City", - "VC": "St. Vincent & Grenadines", - "VE": "Venezuela", - "VG": "British Virgin Islands", - "VI": "U.S. Virgin Islands", - "VN": "Vietnam", - "VU": "Vanuatu", - "WF": "Wallis & Futuna", - "WS": "Samoa", - "XK": "Kosovo", - "YE": "Yemen", - "YT": "Mayotte", - "ZA": "South Africa", - "ZM": "Zambia", - "ZW": "Zimbabwe", - "ZZ": "Unknown Region" - } - } - } - } -} +{ + "main": { + "en-US": { + "identity": { + "version": { + "_number": "$Revision: 13133 $", + "_cldrVersion": "31" + }, + "language": "en", + "territory": "US" + }, + "localeDisplayNames": { + "territories": { + "001": "World", + "002": "Africa", + "003": "North America", + "005": "South America", + "009": "Oceania", + "011": "Western Africa", + "013": "Central America", + "014": "Eastern Africa", + "015": "Northern Africa", + "017": "Middle Africa", + "018": "Southern Africa", + "019": "Americas", + "021": "Northern America", + "029": "Caribbean", + "030": "Eastern Asia", + "034": "Southern Asia", + "035": "Southeast Asia", + "039": "Southern Europe", + "053": "Australasia", + "054": "Melanesia", + "057": "Micronesian Region", + "061": "Polynesia", + "142": "Asia", + "143": "Central Asia", + "145": "Western Asia", + "150": "Europe", + "151": "Eastern Europe", + "154": "Northern Europe", + "155": "Western Europe", + "419": "Latin America", + "AC": "Ascension Island", + "AD": "Andorra", + "AE": "United Arab Emirates", + "AF": "Afghanistan", + "AG": "Antigua & Barbuda", + "AI": "Anguilla", + "AL": "Albania", + "AM": "Armenia", + "AO": "Angola", + "AQ": "Antarctica", + "AR": "Argentina", + "AS": "American Samoa", + "AT": "Austria", + "AU": "Australia", + "AW": "Aruba", + "AX": "Åland Islands", + "AZ": "Azerbaijan", + "BA": "Bosnia & Herzegovina", + "BA-alt-short": "Bosnia", + "BB": "Barbados", + "BD": "Bangladesh", + "BE": "Belgium", + "BF": "Burkina Faso", + "BG": "Bulgaria", + "BH": "Bahrain", + "BI": "Burundi", + "BJ": "Benin", + "BL": "St. Barthélemy", + "BM": "Bermuda", + "BN": "Brunei", + "BO": "Bolivia", + "BQ": "Caribbean Netherlands", + "BR": "Brazil", + "BS": "Bahamas", + "BT": "Bhutan", + "BV": "Bouvet Island", + "BW": "Botswana", + "BY": "Belarus", + "BZ": "Belize", + "CA": "Canada", + "CC": "Cocos (Keeling) Islands", + "CD": "Congo - Kinshasa", + "CD-alt-variant": "Congo (DRC)", + "CF": "Central African Republic", + "CG": "Congo - Brazzaville", + "CG-alt-variant": "Congo (Republic)", + "CH": "Switzerland", + "CI": "Côte d’Ivoire", + "CI-alt-variant": "Ivory Coast", + "CK": "Cook Islands", + "CL": "Chile", + "CM": "Cameroon", + "CN": "China", + "CO": "Colombia", + "CP": "Clipperton Island", + "CR": "Costa Rica", + "CU": "Cuba", + "CV": "Cape Verde", + "CW": "Curaçao", + "CX": "Christmas Island", + "CY": "Cyprus", + "CZ": "Czechia", + "CZ-alt-variant": "Czech Republic", + "DE": "Germany", + "DG": "Diego Garcia", + "DJ": "Djibouti", + "DK": "Denmark", + "DM": "Dominica", + "DO": "Dominican Republic", + "DZ": "Algeria", + "EA": "Ceuta & Melilla", + "EC": "Ecuador", + "EE": "Estonia", + "EG": "Egypt", + "EH": "Western Sahara", + "ER": "Eritrea", + "ES": "Spain", + "ET": "Ethiopia", + "EU": "European Union", + "EZ": "Eurozone", + "FI": "Finland", + "FJ": "Fiji", + "FK": "Falkland Islands", + "FK-alt-variant": "Falkland Islands (Islas Malvinas)", + "FM": "Micronesia", + "FO": "Faroe Islands", + "FR": "France", + "GA": "Gabon", + "GB": "United Kingdom", + "GB-alt-short": "UK", + "GD": "Grenada", + "GE": "Georgia", + "GF": "French Guiana", + "GG": "Guernsey", + "GH": "Ghana", + "GI": "Gibraltar", + "GL": "Greenland", + "GM": "Gambia", + "GN": "Guinea", + "GP": "Guadeloupe", + "GQ": "Equatorial Guinea", + "GR": "Greece", + "GS": "South Georgia & South Sandwich Islands", + "GT": "Guatemala", + "GU": "Guam", + "GW": "Guinea-Bissau", + "GY": "Guyana", + "HK": "Hong Kong SAR China", + "HK-alt-short": "Hong Kong", + "HM": "Heard & McDonald Islands", + "HN": "Honduras", + "HR": "Croatia", + "HT": "Haiti", + "HU": "Hungary", + "IC": "Canary Islands", + "ID": "Indonesia", + "IE": "Ireland", + "IL": "Israel", + "IM": "Isle of Man", + "IN": "India", + "IO": "British Indian Ocean Territory", + "IQ": "Iraq", + "IR": "Iran", + "IS": "Iceland", + "IT": "Italy", + "JE": "Jersey", + "JM": "Jamaica", + "JO": "Jordan", + "JP": "Japan", + "KE": "Kenya", + "KG": "Kyrgyzstan", + "KH": "Cambodia", + "KI": "Kiribati", + "KM": "Comoros", + "KN": "St. Kitts & Nevis", + "KP": "North Korea", + "KR": "South Korea", + "KW": "Kuwait", + "KY": "Cayman Islands", + "KZ": "Kazakhstan", + "LA": "Laos", + "LB": "Lebanon", + "LC": "St. Lucia", + "LI": "Liechtenstein", + "LK": "Sri Lanka", + "LR": "Liberia", + "LS": "Lesotho", + "LT": "Lithuania", + "LU": "Luxembourg", + "LV": "Latvia", + "LY": "Libya", + "MA": "Morocco", + "MC": "Monaco", + "MD": "Moldova", + "ME": "Montenegro", + "MF": "St. Martin", + "MG": "Madagascar", + "MH": "Marshall Islands", + "MK": "Macedonia", + "MK-alt-variant": "Macedonia (FYROM)", + "ML": "Mali", + "MM": "Myanmar (Burma)", + "MM-alt-short": "Myanmar", + "MN": "Mongolia", + "MO": "Macau SAR China", + "MO-alt-short": "Macau", + "MP": "Northern Mariana Islands", + "MQ": "Martinique", + "MR": "Mauritania", + "MS": "Montserrat", + "MT": "Malta", + "MU": "Mauritius", + "MV": "Maldives", + "MW": "Malawi", + "MX": "Mexico", + "MY": "Malaysia", + "MZ": "Mozambique", + "NA": "Namibia", + "NC": "New Caledonia", + "NE": "Niger", + "NF": "Norfolk Island", + "NG": "Nigeria", + "NI": "Nicaragua", + "NL": "Netherlands", + "NO": "Norway", + "NP": "Nepal", + "NR": "Nauru", + "NU": "Niue", + "NZ": "New Zealand", + "OM": "Oman", + "PA": "Panama", + "PE": "Peru", + "PF": "French Polynesia", + "PG": "Papua New Guinea", + "PH": "Philippines", + "PK": "Pakistan", + "PL": "Poland", + "PM": "St. Pierre & Miquelon", + "PN": "Pitcairn Islands", + "PR": "Puerto Rico", + "PS": "Palestinian Territories", + "PS-alt-short": "Palestine", + "PT": "Portugal", + "PW": "Palau", + "PY": "Paraguay", + "QA": "Qatar", + "QO": "Outlying Oceania", + "RE": "Réunion", + "RO": "Romania", + "RS": "Serbia", + "RU": "Russia", + "RW": "Rwanda", + "SA": "Saudi Arabia", + "SB": "Solomon Islands", + "SC": "Seychelles", + "SD": "Sudan", + "SE": "Sweden", + "SG": "Singapore", + "SH": "St. Helena", + "SI": "Slovenia", + "SJ": "Svalbard & Jan Mayen", + "SK": "Slovakia", + "SL": "Sierra Leone", + "SM": "San Marino", + "SN": "Senegal", + "SO": "Somalia", + "SR": "Suriname", + "SS": "South Sudan", + "ST": "São Tomé & Príncipe", + "SV": "El Salvador", + "SX": "Sint Maarten", + "SY": "Syria", + "SZ": "Swaziland", + "TA": "Tristan da Cunha", + "TC": "Turks & Caicos Islands", + "TD": "Chad", + "TF": "French Southern Territories", + "TG": "Togo", + "TH": "Thailand", + "TJ": "Tajikistan", + "TK": "Tokelau", + "TL": "Timor-Leste", + "TL-alt-variant": "East Timor", + "TM": "Turkmenistan", + "TN": "Tunisia", + "TO": "Tonga", + "TR": "Turkey", + "TT": "Trinidad & Tobago", + "TV": "Tuvalu", + "TW": "Taiwan", + "TZ": "Tanzania", + "UA": "Ukraine", + "UG": "Uganda", + "UM": "U.S. Outlying Islands", + "UN": "United Nations", + "UN-alt-short": "UN", + "US": "United States", + "US-alt-short": "US", + "UY": "Uruguay", + "UZ": "Uzbekistan", + "VA": "Vatican City", + "VC": "St. Vincent & Grenadines", + "VE": "Venezuela", + "VG": "British Virgin Islands", + "VI": "U.S. Virgin Islands", + "VN": "Vietnam", + "VU": "Vanuatu", + "WF": "Wallis & Futuna", + "WS": "Samoa", + "XK": "Kosovo", + "YE": "Yemen", + "YT": "Mayotte", + "ZA": "South Africa", + "ZM": "Zambia", + "ZW": "Zimbabwe", + "ZZ": "Unknown Region" + } + } + } + } +} diff --git a/lib/composer/vendor/gettext/languages/src/cldr-data/supplemental/plurals.json b/lib/composer/vendor/gettext/languages/src/cldr-data/supplemental/plurals.json index cea956d9..3042a5b7 100644 --- a/lib/composer/vendor/gettext/languages/src/cldr-data/supplemental/plurals.json +++ b/lib/composer/vendor/gettext/languages/src/cldr-data/supplemental/plurals.json @@ -1,844 +1,853 @@ -{ - "supplemental": { - "version": { - "_cldrVersion": "27", - "_number": "$Revision: 11229 $" - }, - "generation": { - "_date": "$Date: 2015-02-18 16:11:57 +0100 (Wed, 18 Feb 2015) $" - }, - "plurals-type-cardinal": { - "af": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ak": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "am": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ar": { - "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …", - "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", - "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "as": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "asa": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ast": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "az": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "be": { - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", - "pluralRule-count-few": "n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …", - "pluralRule-count-many": "n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …" - }, - "bem": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bez": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bg": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bh": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bm": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bn": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "br": { - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …", - "pluralRule-count-two": "n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …", - "pluralRule-count-few": "n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0, 9.0, 23.0, 24.0, 29.0, 33.0, 34.0, 103.0, 1003.0, …", - "pluralRule-count-many": "n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …", - "pluralRule-count-other": " @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …" - }, - "brx": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bs": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ca": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ce": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "cgg": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "chr": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ckb": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "cs": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", - "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" - }, - "cy": { - "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-few": "n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000", - "pluralRule-count-many": "n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000", - "pluralRule-count-other": " @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "da": { - "pluralRule-count-one": "n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "de": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "dsb": { - "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "dv": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "dz": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ee": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "el": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "en": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "eo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "es": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "et": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "eu": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fa": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ff": { - "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fi": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fil": { - "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" - }, - "fo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fr": { - "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fur": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fy": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ga": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-few": "n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000", - "pluralRule-count-many": "n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000", - "pluralRule-count-other": " @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gd": { - "pluralRule-count-one": "n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000", - "pluralRule-count-two": "n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000", - "pluralRule-count-few": "n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00", - "pluralRule-count-other": " @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gl": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gsw": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gu": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "guw": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gv": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …", - "pluralRule-count-two": "v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …", - "pluralRule-count-few": "v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 3~10, 13~19, 23, 103, 1003, …" - }, - "ha": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "haw": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "he": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-two": "i = 2 and v = 0 @integer 2", - "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hi": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hr": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hsb": { - "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hu": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hy": { - "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "id": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ig": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ii": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "in": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "is": { - "pluralRule-count-one": "t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "it": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "iu": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "iw": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-two": "i = 2 and v = 0 @integer 2", - "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ja": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jbo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jgo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ji": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jmc": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jv": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jw": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ka": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kab": { - "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kaj": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kcg": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kde": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kea": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kk": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kkj": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kl": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "km": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kn": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ko": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ks": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ksb": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ksh": { - "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ku": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kw": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ky": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lag": { - "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", - "pluralRule-count-one": "i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lb": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lg": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lkt": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ln": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lt": { - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", - "pluralRule-count-few": "n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …", - "pluralRule-count-many": "f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lv": { - "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" - }, - "mas": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mg": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mgo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mk": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ml": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mo": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" - }, - "mr": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ms": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mt": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-few": "n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …", - "pluralRule-count-many": "n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", - "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "my": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nah": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "naq": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nb": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nd": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ne": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nl": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nnh": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "no": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nqo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nr": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nso": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ny": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nyn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "om": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "or": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "os": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pa": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pap": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pl": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", - "pluralRule-count-many": "v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "prg": { - "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" - }, - "ps": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pt": { - "pluralRule-count-one": "n = 0..2 and n != 2 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pt-PT": { - "pluralRule-count-one": "n = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "rm": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ro": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" - }, - "rof": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "root": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ru": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", - "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "rwk": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sah": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "saq": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "se": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "seh": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ses": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sg": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sh": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "shi": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-few": "n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00", - "pluralRule-count-other": " @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "si": { - "pluralRule-count-one": "n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sk": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", - "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" - }, - "sl": { - "pluralRule-count-one": "v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …", - "pluralRule-count-two": "v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …", - "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" - }, - "sma": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "smi": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "smj": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "smn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sms": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "so": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sq": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sr": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ss": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ssy": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "st": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sv": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sw": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "syr": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ta": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "te": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "teo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "th": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ti": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tig": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tk": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tl": { - "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" - }, - "tn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "to": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tr": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ts": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tzm": { - "pluralRule-count-one": "n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0", - "pluralRule-count-other": " @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ug": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "uk": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", - "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ur": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "uz": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ve": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "vi": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "vo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "vun": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "wa": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "wae": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "wo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "xh": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "xog": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "yi": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "yo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "zh": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "zu": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - } - } - } -} +{ + "supplemental": { + "version": { + "_number": "$Revision: 13253 $", + "_unicodeVersion": "9.0.0", + "_cldrVersion": "31" + }, + "plurals-type-cardinal": { + "af": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ak": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "am": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ar": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …", + "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", + "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ars": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …", + "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", + "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "as": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "asa": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ast": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "az": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "be": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", + "pluralRule-count-few": "n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …", + "pluralRule-count-many": "n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …" + }, + "bem": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bez": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bh": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bm": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bn": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "br": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …", + "pluralRule-count-two": "n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …", + "pluralRule-count-few": "n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0, 9.0, 23.0, 24.0, 29.0, 33.0, 34.0, 103.0, 1003.0, …", + "pluralRule-count-many": "n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …", + "pluralRule-count-other": " @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …" + }, + "brx": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bs": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ca": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ce": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "cgg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "chr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ckb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "cs": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", + "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "cy": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000", + "pluralRule-count-many": "n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000", + "pluralRule-count-other": " @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "da": { + "pluralRule-count-one": "n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "de": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "dsb": { + "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "dv": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "dz": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ee": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "el": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "en": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "eo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "es": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "et": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "eu": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fa": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ff": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fi": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fil": { + "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" + }, + "fo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fr": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fur": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fy": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ga": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000", + "pluralRule-count-many": "n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000", + "pluralRule-count-other": " @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gd": { + "pluralRule-count-one": "n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000", + "pluralRule-count-two": "n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000", + "pluralRule-count-few": "n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00", + "pluralRule-count-other": " @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gl": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gsw": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gu": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "guw": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gv": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …", + "pluralRule-count-two": "v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …", + "pluralRule-count-few": "v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 3~10, 13~19, 23, 103, 1003, …" + }, + "ha": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "haw": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "he": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-two": "i = 2 and v = 0 @integer 2", + "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hi": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hr": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hsb": { + "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hu": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hy": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "id": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ig": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ii": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "in": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "is": { + "pluralRule-count-one": "t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "it": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "iu": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "iw": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-two": "i = 2 and v = 0 @integer 2", + "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ja": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jbo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jgo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ji": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jmc": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jv": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jw": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ka": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kab": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kaj": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kcg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kde": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kea": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kk": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kkj": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kl": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "km": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kn": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ko": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ks": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ksb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ksh": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ku": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kw": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ky": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lag": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lkt": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ln": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lt": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", + "pluralRule-count-few": "n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …", + "pluralRule-count-many": "f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lv": { + "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" + }, + "mas": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mg": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mgo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mk": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ml": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mo": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" + }, + "mr": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ms": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mt": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-few": "n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …", + "pluralRule-count-many": "n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", + "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "my": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nah": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "naq": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nd": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ne": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nl": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nnh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "no": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nqo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nso": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ny": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nyn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "om": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "or": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "os": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pa": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pap": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pl": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", + "pluralRule-count-many": "v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "prg": { + "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" + }, + "ps": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pt": { + "pluralRule-count-one": "i = 0..1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "rm": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ro": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" + }, + "rof": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "root": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ru": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", + "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "rwk": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sah": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "saq": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sdh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "se": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "seh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ses": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sg": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sh": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "shi": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-few": "n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00", + "pluralRule-count-other": " @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "si": { + "pluralRule-count-one": "n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sk": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", + "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "sl": { + "pluralRule-count-one": "v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …", + "pluralRule-count-two": "v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …", + "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "sma": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "smi": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "smj": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "smn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sms": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "so": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sq": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sr": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ss": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ssy": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "st": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sv": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sw": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "syr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ta": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "te": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "teo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "th": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ti": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tig": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tk": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tl": { + "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" + }, + "tn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "to": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ts": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tzm": { + "pluralRule-count-one": "n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0", + "pluralRule-count-other": " @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ug": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "uk": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", + "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ur": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "uz": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ve": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "vi": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "vo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "vun": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "wa": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "wae": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "wo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "xh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "xog": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "yi": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "yo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "yue": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "zh": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "zu": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + } + } + } +} diff --git a/lib/composer/vendor/grasmash/expander/.gitignore b/lib/composer/vendor/grasmash/expander/.gitignore new file mode 100644 index 00000000..60c86adf --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/.gitignore @@ -0,0 +1,50 @@ +# Cache and logs (Symfony2) +/app/cache/* +/app/logs/* +!app/cache/.gitkeep +!app/logs/.gitkeep + +# Email spool folder +/app/spool/* + +# Cache, session files and logs (Symfony3) +/var/cache/* +/var/logs/* +/var/sessions/* +!var/cache/.gitkeep +!var/logs/.gitkeep +!var/sessions/.gitkeep + +# Parameters +/app/config/parameters.yml +/app/config/parameters.ini + +# Managed by Composer +/app/bootstrap.php.cache +/var/bootstrap.php.cache +/bin/* +!bin/console +!bin/symfony_requirements +/vendor/ + +# Assets and user uploads +/web/bundles/ +/web/uploads/ + +# Assets managed by Bower +/web/assets/vendor/ + +# PHPUnit +/app/phpunit.xml +/phpunit.xml + +# Build data +/build/ + +# Composer PHAR +/composer.phar + +# Backup entities generated with doctrine:generate:entities command +*/Entity/*~ + +.idea diff --git a/lib/composer/vendor/grasmash/expander/.travis.yml b/lib/composer/vendor/grasmash/expander/.travis.yml new file mode 100644 index 00000000..5076ffea --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/.travis.yml @@ -0,0 +1,28 @@ +language: php + +matrix: + fast_finish: true + include: + - php: 7.2 + - php: 7.1 + - php: 7.0.11 + - php: 5.6 + - php: 5.5 + - php: 5.4 + +sudo: false + +cache: + apt: true + directories: + - "$HOME/.composer/cache" + - "vendor" + +install: + - composer install + +script: + - composer test + +after_success: + - travis_retry php vendor/bin/coveralls -v diff --git a/lib/composer/vendor/grasmash/expander/CONTRIBUTING.md b/lib/composer/vendor/grasmash/expander/CONTRIBUTING.md new file mode 100644 index 00000000..e69de29b diff --git a/lib/composer/vendor/grasmash/expander/LICENSE.md b/lib/composer/vendor/grasmash/expander/LICENSE.md new file mode 100644 index 00000000..632424ee --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Matthew Grasmick + +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/lib/composer/vendor/grasmash/expander/README.md b/lib/composer/vendor/grasmash/expander/README.md new file mode 100644 index 00000000..8bfbaac6 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/README.md @@ -0,0 +1,149 @@ +[![Build Status](https://travis-ci.org/grasmash/expander.svg?branch=master)](https://travis-ci.org/grasmash/expander) [![Packagist](https://img.shields.io/packagist/v/grasmash/expander.svg)](https://packagist.org/packages/grasmash/expander) +[![Total Downloads](https://poser.pugx.org/grasmash/expander/downloads)](https://packagist.org/packages/grasmash/expander) [![Coverage Status](https://coveralls.io/repos/github/grasmash/expander/badge.svg?branch=master)](https://coveralls.io/github/grasmash/expander?branch=master) + +This tool expands property references in PHP arrays. For example implementation, see Yaml Expander. + +### Installation + + composer require grasmash/expander + +### Example usage: + +Property references use dot notation to indicate array keys, and must be wrapped in `${}`. + +Expansion logic: + +```php + 'book', + 'book' => [ + 'title' => 'Dune', + 'author' => 'Frank Herbert', + 'copyright' => '${book.author} 1965', + 'protaganist' => '${characters.0.name}', + 'media' => [ + 0 => 'hardcover', + 1 => 'paperback', + ], + 'nested-reference' => '${book.sequel}', + ], + 'characters' => [ + 0 => [ + 'name' => 'Paul Atreides', + 'occupation' => 'Kwisatz Haderach', + 'aliases' => [ + 0 => 'Usul', + 1 => 'Muad\'Dib', + 2 => 'The Preacher', + ], + ], + 1 => [ + 'name' => 'Duncan Idaho', + 'occupation' => 'Swordmaster', + ], + ], + 'summary' => '${book.title} by ${book.author}', + 'publisher' => '${not.real.property}', + 'sequels' => '${book.sequel}, and others.', + 'available-products' => '${book.media.1}, ${book.media.0}', + 'product-name' => '${${type}.title}', + 'boolean-value' => true, + 'null-value' => NULL, + 'inline-array' => [ + 0 => 'one', + 1 => 'two', + 2 => 'three', + ], + 'expand-array' => '${inline-array}', + 'env-test' => '${env.test}', +]; + +$expander = new Expander(); +// Optionally set a logger. +$expander->setLogger(new Psr\Log\NullLogger()); +// Optionally set a Stringfier, used to convert array placeholders into strings. Defaults to using implode() with `,` delimeter. +// @see StringifierInterface. +$expander->setStringifier(new Grasmash\Expander\Stringifier()); + +// Parse an array, expanding internal property references. +$expanded = $expander->expandArrayProperties($array); + +// Parse an array, expanding references using both internal and supplementary values. +$reference_properties = 'book' => ['sequel' => 'Dune Messiah']; +// Set an environmental variable. +putenv("test=gomjabbar"); +$expanded = $expander->expandArrayProperties($array, $reference_properties); + +print_r($expanded); +```` + +Resultant array: + +```php +Array +( + [type] => book + [book] => Array + ( + [title] => Dune + [author] => Frank Herbert + [copyright] => Frank Herbert 1965 + [protaganist] => Paul Atreides + [media] => Array + ( + [0] => hardcover + [1] => paperback + ) + + [nested-reference] => Dune Messiah + ) + + [characters] => Array + ( + [0] => Array + ( + [name] => Paul Atreides + [occupation] => Kwisatz Haderach + [aliases] => Array + ( + [0] => Usul + [1] => Muad'Dib + [2] => The Preacher + ) + + ) + + [1] => Array + ( + [name] => Duncan Idaho + [occupation] => Swordmaster + ) + + ) + + [summary] => Dune by Frank Herbert + [publisher] => ${not.real.property} + [sequels] => Dune Messiah, and others. + [available-products] => paperback, hardcover + [product-name] => Dune + [boolean-value] => 1 + [null-value] => + [inline-array] => Array + ( + [0] => one + [1] => two + [2] => three + ) + + [expand-array] => one,two,three + [env-test] => gomjabbar + [env] => Array + ( + [test] => gomjabbar + ) + +) + +``` diff --git a/lib/composer/vendor/grasmash/expander/RELEASE.md b/lib/composer/vendor/grasmash/expander/RELEASE.md new file mode 100644 index 00000000..2549d0c2 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/RELEASE.md @@ -0,0 +1,11 @@ +# Releasing + +### Execute tests + + ./scripts/run-tests.sh + +To quickly fix PHPCS issues: + + ./scripts/clean-code.sh + + diff --git a/lib/composer/vendor/grasmash/expander/composer.json b/lib/composer/vendor/grasmash/expander/composer.json new file mode 100644 index 00000000..e1b692bf --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/composer.json @@ -0,0 +1,50 @@ +{ + "name": "grasmash/expander", + "description": "Expands internal property references in PHP arrays file.", + "type": "library", + "require": { + "php": ">=5.4", + "dflydev/dot-access-data": "^1.1.0" + }, + "license": "MIT", + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "minimum-stability": "stable", + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "require-dev": { + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "greg-1-anderson/composer-test-scenarios": "^1", + "squizlabs/php_codesniffer": "^2.7" + }, + "scripts": { + "cs": "phpcs -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "cbf": "phpcbf -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "unit": "phpunit", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/grasmash/expander/composer.lock b/lib/composer/vendor/grasmash/expander/composer.lock new file mode 100644 index 00000000..2019acc7 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/composer.lock @@ -0,0 +1,1750 @@ +{ + "_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": "a297a5ed4d1b90e8a7dfadfcc0845cc8", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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": "2015-06-14T21:17:01+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2016-01-25T08:17:30+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": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.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": "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": "2015-10-06T15:47:00+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": "1.4.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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-12-04T08:55:13+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.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": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "1.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzle/guzzle": "^2.8 || ^3.0", + "php": "^5.3.3 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "Satooshi\\": "src/Satooshi/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-12-06T23:17:56+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "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.4-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-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "f4f3f1d7090c464434bbbc3e8aa2b41149c59196" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/f4f3f1d7090c464434bbbc3e8aa2b41149c59196", + "reference": "f4f3f1d7090c464434bbbc3e8aa2b41149c59196", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/filesystem": "~2.3|~3.0.0" + }, + "require-dev": { + "symfony/yaml": "~2.7|~3.0.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T11:56:23+00:00" + }, + { + "name": "symfony/console", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "46270f1ca44f08ebc134ce120fd2c2baf5fd63de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/46270f1ca44f08ebc134ce120fd2c2baf5fd63de", + "reference": "46270f1ca44f08ebc134ce120fd2c2baf5fd63de", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/debug": "^2.7.2|~3.0.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1|~3.0.0", + "symfony/process": "~2.1|~3.0.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-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": "2017-11-29T09:33:18+00:00" + }, + { + "name": "symfony/debug", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "e72a0340dc2e273b3c4398d8eef9157ba51d8b95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/e72a0340dc2e273b3c4398d8eef9157ba51d8b95", + "reference": "e72a0340dc2e273b3c4398d8eef9157ba51d8b95", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.2|~3.0.0", + "symfony/http-kernel": "~2.3.24|~2.5.9|^2.6.2|~3.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "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 Debug Component", + "homepage": "https://symfony.com", + "time": "2017-11-19T19:05:05+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b59aacf238fadda50d612c9de73b74751872a903" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b59aacf238fadda50d612c9de73b74751872a903", + "reference": "b59aacf238fadda50d612c9de73b74751872a903", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-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": "2017-11-05T15:25:56+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "15ceb6736a9eebd0d99f9e05a62296ab6ce1cf2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/15ceb6736a9eebd0d99f9e05a62296ab6ce1cf2b", + "reference": "15ceb6736a9eebd0d99f9e05a62296ab6ce1cf2b", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-19T18:39:05+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-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": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "533bb9d7c2da1c6d2da163ecf0f22043ea98f59b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/533bb9d7c2da1c6d2da163ecf0f22043ea98f59b", + "reference": "533bb9d7c2da1c6d2da163ecf0f22043ea98f59b", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T18:59:36+00:00" + }, + { + "name": "symfony/yaml", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "968ef42161e4bc04200119da473077f9e7015128" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/968ef42161e4bc04200119da473077f9e7015128", + "reference": "968ef42161e4bc04200119da473077f9e7015128", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-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": "2017-11-29T09:33:18+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4" + }, + "platform-dev": [] +} diff --git a/lib/composer/vendor/grasmash/expander/phpunit.xml.dist b/lib/composer/vendor/grasmash/expander/phpunit.xml.dist new file mode 100644 index 00000000..59d79907 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/phpunit.xml.dist @@ -0,0 +1,16 @@ + + + + + tests/phpunit + + + + + + + + src + + + \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/expander/src/Expander.php b/lib/composer/vendor/grasmash/expander/src/Expander.php new file mode 100644 index 00000000..7f5fcef7 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/src/Expander.php @@ -0,0 +1,303 @@ +setLogger(new NullLogger()); + $this->setStringifier(new Stringifier()); + } + + /** + * @return \Grasmash\Expander\StringifierInterface + */ + public function getStringifier() + { + return $this->stringifier; + } + + /** + * @param \Grasmash\Expander\StringifierInterface $stringifier + */ + public function setStringifier(\Grasmash\Expander\StringifierInterface $stringifier) + { + $this->stringifier = $stringifier; + } + + /** + * @return \Psr\Log\LoggerInterface + */ + public function getLogger() + { + return $this->logger; + } + + /** + * @param \Psr\Log\LoggerInterface $logger + */ + public function setLogger(\Psr\Log\LoggerInterface $logger) + { + $this->logger = $logger; + } + + /** + * Expands property placeholders in an array. + * + * Placeholders should formatted as ${parent.child}. + * + * @param array $array + * An array containing properties to expand. + * + * @return array + * The modified array in which placeholders have been replaced with + * values. + */ + public function expandArrayProperties($array, $reference_array = []) + { + $data = new Data($array); + if ($reference_array) { + $reference_data = new Data($reference_array); + $this->doExpandArrayProperties($data, $array, '', $reference_data); + } else { + $this->doExpandArrayProperties($data, $array); + } + + return $data->export(); + } + + /** + * Performs the actual property expansion. + * + * @param Data $data + * A data object, containing the $array. + * @param array $array + * The original, unmodified array. + * @param string $parent_keys + * The parent keys of the current key in dot notation. This is used to + * track the absolute path to the current key in recursive cases. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + */ + protected function doExpandArrayProperties( + $data, + $array, + $parent_keys = '', + $reference_data = null + ) { + foreach ($array as $key => $value) { + // Boundary condition(s). + if (is_null($value) || is_bool($value)) { + continue; + } + // Recursive case. + if (is_array($value)) { + $this->doExpandArrayProperties($data, $value, $parent_keys . "$key.", $reference_data); + } // Base case. + else { + $this->expandStringProperties($data, $parent_keys, $reference_data, $value, $key); + } + } + } + + /** + * Expand a single property. + * + * @param Data $data + * A data object, containing the $array. + * @param string $parent_keys + * The parent keys of the current key in dot notation. This is used to + * track the absolute path to the current key in recursive cases. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * @param string $value + * The unexpanded property value. + * @param string $key + * The immediate key of the property. + * + * @return mixed + */ + protected function expandStringProperties( + $data, + $parent_keys, + $reference_data, + $value, + $key + ) { + // We loop through all placeholders in a given string. + // E.g., '${placeholder1} ${placeholder2}' requires two replacements. + while (strpos($value, '${') !== false) { + $original_value = $value; + $value = preg_replace_callback( + '/\$\{([^\$}]+)\}/', + function ($matches) use ($data, $reference_data) { + return $this->expandStringPropertiesCallback( + $matches, + $data, + $reference_data + ); + }, + $value + ); + + // If no replacement occurred at all, break to prevent + // infinite loop. + if ($original_value == $value) { + break; + } + + // Set value on $data object. + if ($parent_keys) { + $full_key = $parent_keys . "$key"; + } else { + $full_key = $key; + } + $data->set($full_key, $value); + } + return $value; + } + + /** + * Expansion callback used by preg_replace_callback() in expandProperty(). + * + * @param array $matches + * An array of matches created by preg_replace_callback(). + * @param Data $data + * A data object containing the complete array being operated upon. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * + * @return mixed + */ + public function expandStringPropertiesCallback( + $matches, + $data, + $reference_data = null + ) { + $property_name = $matches[1]; + $unexpanded_value = $matches[0]; + + // Use only values within the subject array's data. + if (!$reference_data) { + return $this->expandProperty($property_name, $unexpanded_value, $data); + } // Search both the subject array's data and the reference data for a value. + else { + return $this->expandPropertyWithReferenceData( + $property_name, + $unexpanded_value, + $data, + $reference_data + ); + } + } + + /** + * Searches both the subject data and the reference data for value. + * + * @param string $property_name + * The name of the value for which to search. + * @param string $unexpanded_value + * The original, unexpanded value, containing the placeholder. + * @param Data $data + * A data object containing the complete array being operated upon. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * + * @return string + * The expanded string. + */ + public function expandPropertyWithReferenceData( + $property_name, + $unexpanded_value, + $data, + $reference_data + ) { + $expanded_value = $this->expandProperty( + $property_name, + $unexpanded_value, + $data + ); + // If the string was not changed using the subject data, try using + // the reference data. + if ($expanded_value == $unexpanded_value) { + $expanded_value = $this->expandProperty( + $property_name, + $unexpanded_value, + $reference_data + ); + } + + return $expanded_value; + } + + /** + * Searches a data object for a value. + * + * @param string $property_name + * The name of the value for which to search. + * @param string $unexpanded_value + * The original, unexpanded value, containing the placeholder. + * @param Data $data + * A data object containing possible replacement values. + * + * @return mixed + */ + public function expandProperty($property_name, $unexpanded_value, $data) + { + if (strpos($property_name, "env.") === 0 && + !$data->has($property_name)) { + $env_key = substr($property_name, 4); + if (getenv($env_key)) { + $data->set($property_name, getenv($env_key)); + } + } + + if (!$data->has($property_name)) { + $this->log("Property \${'$property_name'} could not be expanded."); + return $unexpanded_value; + } else { + $expanded_value = $data->get($property_name); + if (is_array($expanded_value)) { + $expanded_value = $this->getStringifier()->stringifyArray($expanded_value); + return $expanded_value; + } + $this->log("Expanding property \${'$property_name'} => $expanded_value."); + return $expanded_value; + } + } + + /** + * Logs a message using the logger. + * + * @param string $message + * The message to log. + */ + public function log($message) + { + if ($this->getLogger()) { + $this->getLogger()->debug($message); + } + } +} diff --git a/lib/composer/vendor/grasmash/expander/src/Stringifier.php b/lib/composer/vendor/grasmash/expander/src/Stringifier.php new file mode 100644 index 00000000..7937b319 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/src/Stringifier.php @@ -0,0 +1,24 @@ +expandArrayProperties($array); + $this->assertEquals('gomjabbar', $expanded['env-test']); + $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']); + $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']); + $this->assertEquals('Dune by Frank Herbert', $expanded['summary']); + $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']); + $this->assertEquals('Dune', $expanded['product-name']); + $this->assertEquals(Stringifier::stringifyArray($array['inline-array']), $expanded['expand-array']); + + $expanded = $expander->expandArrayProperties($array, $reference_array); + $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']); + $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']); + } + + /** + * @return array + * An array of values to test. + */ + public function providerYaml() + { + return [ + [ + [ + 'type' => 'book', + 'book' => [ + 'title' => 'Dune', + 'author' => 'Frank Herbert', + 'copyright' => '${book.author} 1965', + 'protaganist' => '${characters.0.name}', + 'media' => [ + 0 => 'hardcover', + ], + 'nested-reference' => '${book.sequel}', + ], + 'characters' => [ + 0 => [ + 'name' => 'Paul Atreides', + 'occupation' => 'Kwisatz Haderach', + 'aliases' => [ + 0 => 'Usul', + 1 => "Muad'Dib", + 2 => 'The Preacher', + ], + ], + 1 => [ + 'name' => 'Duncan Idaho', + 'occupation' => 'Swordmaster', + ], + ], + 'summary' => '${book.title} by ${book.author}', + 'publisher' => '${not.real.property}', + 'sequels' => '${book.sequel}, and others.', + 'available-products' => '${book.media.1}, ${book.media.0}', + 'product-name' => '${${type}.title}', + 'boolean-value' => true, + 'null-value' => null, + 'inline-array' => [ + 0 => 'one', + 1 => 'two', + 2 => 'three', + ], + 'expand-array' => '${inline-array}', + 'env-test' => '${env.test}', + ], + [ + 'book' => [ + 'sequel' => 'Dune Messiah' + ] + ] + ], + ]; + } + + /** + * Tests Expander::expandProperty(). + * + * @dataProvider providerTestExpandProperty + */ + public function testExpandProperty(array $array, $property_name, $unexpanded_string, $expected) + { + $data = new Data($array); + $expander = new Expander(); + $expanded_value = $expander->expandProperty($property_name, $unexpanded_string, $data); + + $this->assertEquals($expected, $expanded_value); + } + + /** + * @return array + */ + public function providerTestExpandProperty() + { + return [ + [ ['author' => 'Frank Herbert'], 'author', '${author}', 'Frank Herbert' ], + [ ['book' => ['author' => 'Frank Herbert' ]], 'book.author', '${book.author}', 'Frank Herbert' ], + ]; + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/.gitignore b/lib/composer/vendor/grasmash/yaml-expander/.gitignore new file mode 100644 index 00000000..60c86adf --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/.gitignore @@ -0,0 +1,50 @@ +# Cache and logs (Symfony2) +/app/cache/* +/app/logs/* +!app/cache/.gitkeep +!app/logs/.gitkeep + +# Email spool folder +/app/spool/* + +# Cache, session files and logs (Symfony3) +/var/cache/* +/var/logs/* +/var/sessions/* +!var/cache/.gitkeep +!var/logs/.gitkeep +!var/sessions/.gitkeep + +# Parameters +/app/config/parameters.yml +/app/config/parameters.ini + +# Managed by Composer +/app/bootstrap.php.cache +/var/bootstrap.php.cache +/bin/* +!bin/console +!bin/symfony_requirements +/vendor/ + +# Assets and user uploads +/web/bundles/ +/web/uploads/ + +# Assets managed by Bower +/web/assets/vendor/ + +# PHPUnit +/app/phpunit.xml +/phpunit.xml + +# Build data +/build/ + +# Composer PHAR +/composer.phar + +# Backup entities generated with doctrine:generate:entities command +*/Entity/*~ + +.idea diff --git a/lib/composer/vendor/grasmash/yaml-expander/.travis.yml b/lib/composer/vendor/grasmash/yaml-expander/.travis.yml new file mode 100644 index 00000000..0416daae --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/.travis.yml @@ -0,0 +1,39 @@ +language: php + +branches: + # Only test the master branch and SemVer tags. + only: + - master + - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ + +matrix: + fast_finish: true + include: + - php: 7.2 + env: 'SCENARIO=symfony4 HIGHEST_LOWEST="update"' + - php: 7.1 + env: 'SCENARIO=symfony4' + - php: 7.0.11 + env: 'HIGHEST_LOWEST="update"' + - php: 7.0.11 + - php: 5.6 + - php: 5.5 + - php: 5.4 + env: 'SCENARIO=symfony2 HIGHEST_LOWEST="update --prefer-lowest' + +sudo: false + +cache: + apt: true + directories: + - "$HOME/.composer/cache" + - "vendor" + +install: + - 'composer scenario "${SCENARIO}" "${HIGHEST_LOWEST-install}"' + +script: + - composer test + +after_success: + - travis_retry php vendor/bin/coveralls -v diff --git a/lib/composer/vendor/grasmash/yaml-expander/CONTRIBUTING.md b/lib/composer/vendor/grasmash/yaml-expander/CONTRIBUTING.md new file mode 100644 index 00000000..e69de29b diff --git a/lib/composer/vendor/grasmash/yaml-expander/LICENSE.md b/lib/composer/vendor/grasmash/yaml-expander/LICENSE.md new file mode 100644 index 00000000..632424ee --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Matthew Grasmick + +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/lib/composer/vendor/grasmash/yaml-expander/README.md b/lib/composer/vendor/grasmash/yaml-expander/README.md new file mode 100644 index 00000000..83761462 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/README.md @@ -0,0 +1,100 @@ +[![Build Status](https://travis-ci.org/grasmash/yaml-expander.svg?branch=master)](https://travis-ci.org/grasmash/yaml-expander) [![Packagist](https://img.shields.io/packagist/v/grasmash/yaml-expander.svg)](https://packagist.org/packages/grasmash/yaml-expander) +[![Total Downloads](https://poser.pugx.org/grasmash/yaml-expander/downloads)](https://packagist.org/packages/grasmash/yaml-expander) [![Coverage Status](https://coveralls.io/repos/github/grasmash/yaml-expander/badge.svg?branch=master)](https://coveralls.io/github/grasmash/yaml-expander?branch=master) + +This tool expands property references in YAML files. + +### Installation + + composer require grasmash/yaml-expander + +### Example usage: + +Example dune.yml: + +```yaml +type: book +book: + title: Dune + author: Frank Herbert + copyright: ${book.author} 1965 + protaganist: ${characters.0.name} + media: + - hardcover +characters: + - name: Paul Atreides + occupation: Kwisatz Haderach + aliases: + - Usul + - Muad'Dib + - The Preacher + - name: Duncan Idaho + occupation: Swordmaster +summary: ${book.title} by ${book.author} +product-name: ${${type}.title} +``` + +Property references use dot notation to indicate array keys, and must be wrapped in `${}`. + +Expansion logic: + +```php + ['publication-year' => 1965]]; +$expanded = \Grasmash\YamlExpander\Expander::expandArrayProperties($array, $reference_properties); +print_r($expanded); +```` + +Resultant array: + +```php + 'book', + 'book' => + array ( + 'title' => 'Dune', + 'author' => 'Frank Herbert', + 'copyright' => 'Frank Herbert 1965', + 'protaganist' => 'Paul Atreides', + 'media' => + array ( + 0 => 'hardcover', + ), + ), + 'characters' => + array ( + 0 => + array ( + 'name' => 'Paul Atreides', + 'occupation' => 'Kwisatz Haderach', + 'aliases' => + array ( + 0 => 'Usul', + 1 => 'Muad\'Dib', + 2 => 'The Preacher', + ), + ), + 1 => + array ( + 'name' => 'Duncan Idaho', + 'occupation' => 'Swordmaster', + ), + ), + 'summary' => 'Dune by Frank Herbert', + 'product-name' => 'Dune', +); +``` diff --git a/lib/composer/vendor/grasmash/yaml-expander/RELEASE.md b/lib/composer/vendor/grasmash/yaml-expander/RELEASE.md new file mode 100644 index 00000000..2549d0c2 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/RELEASE.md @@ -0,0 +1,11 @@ +# Releasing + +### Execute tests + + ./scripts/run-tests.sh + +To quickly fix PHPCS issues: + + ./scripts/clean-code.sh + + diff --git a/lib/composer/vendor/grasmash/yaml-expander/composer.json b/lib/composer/vendor/grasmash/yaml-expander/composer.json new file mode 100644 index 00000000..f671ee40 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/composer.json @@ -0,0 +1,59 @@ +{ + "name": "grasmash/yaml-expander", + "description": "Expands internal property references in a yaml file.", + "type": "library", + "require": { + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4", + "dflydev/dot-access-data": "^1.1.0" + }, + "license": "MIT", + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "minimum-stability": "stable", + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "greg-1-anderson/composer-test-scenarios": "^1", + "squizlabs/php_codesniffer": "^2.7" + }, + "scripts": { + "cs": "phpcs -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "cbf": "phpcbf -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "unit": "phpunit", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.5.9" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/composer.lock b/lib/composer/vendor/grasmash/yaml-expander/composer.lock new file mode 100644 index 00000000..7f1268ad --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/composer.lock @@ -0,0 +1,2019 @@ +{ + "_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": "ae81b9e7daa60d332450889eb23e80a9", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "b3d0c9c11be3831b84825967dc6b52b5a7b84e04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/b3d0c9c11be3831b84825967dc6b52b5a7b84e04", + "reference": "b3d0c9c11be3831b84825967dc6b52b5a7b84e04", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "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": "3.4-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": "2017-11-29T13:28:14+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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": "2015-06-14T21:17:01+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "00ff9f3af3132f0c6b2fb9e0906efee402f0c703" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/00ff9f3af3132f0c6b2fb9e0906efee402f0c703", + "reference": "00ff9f3af3132f0c6b2fb9e0906efee402f0c703", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-01T21:34:53+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": "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": "3.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157", + "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.3.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "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-08-08T06:39:58+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773", + "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773", + "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-06-03T08:32:36+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": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.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": "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": "2015-10-06T15:47:00+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": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.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": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+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": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-10-14T23:16:28+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "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.4-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-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.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": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "1de51a6c76359897ab32c309934b93d036bccb60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/1de51a6c76359897ab32c309934b93d036bccb60", + "reference": "1de51a6c76359897ab32c309934b93d036bccb60", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-19T20:09:36+00:00" + }, + { + "name": "symfony/console", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "9468ad3fba3a5e1f0dc12a96e50e84cddb923cf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/9468ad3fba3a5e1f0dc12a96e50e84cddb923cf0", + "reference": "9468ad3fba3a5e1f0dc12a96e50e84cddb923cf0", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-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": "2017-11-29T13:28:14+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "fb2001e5d85f95d8b6ab94ae3be5d2672df128fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/fb2001e5d85f95d8b6ab94ae3be5d2672df128fd", + "reference": "fb2001e5d85f95d8b6ab94ae3be5d2672df128fd", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "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 Debug Component", + "homepage": "https://symfony.com", + "time": "2017-11-21T09:01:46+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "de56eee71e0a128d8c54ccc1909cdefd574bad0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/de56eee71e0a128d8c54ccc1909cdefd574bad0f", + "reference": "de56eee71e0a128d8c54ccc1909cdefd574bad0f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-19T18:59:05+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-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": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/52510fe1aefdc1c5d2076ac6030421d387e689d1", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:28:09+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.5.9" + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/phpunit.xml.dist b/lib/composer/vendor/grasmash/yaml-expander/phpunit.xml.dist new file mode 100644 index 00000000..59d79907 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/phpunit.xml.dist @@ -0,0 +1,16 @@ + + + + + tests/phpunit + + + + + + + + src + + + \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/install b/lib/composer/vendor/grasmash/yaml-expander/scenarios/install new file mode 100755 index 00000000..5bc73b73 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/install @@ -0,0 +1,23 @@ +#!/bin/bash + +SCENARIO=$1 +ACTION=${2-install} + +dir=scenarios/${SCENARIO} +if [ -z "$SCENARIO" ] ; then + SCENARIO=default + dir=. +fi + + +if [ ! -d "$dir" ] ; then + echo "Requested scenario '${SCENARIO}' does not exist." + exit 1 +fi + +echo "Switch to ${SCENARIO} scenario" + +set -ex + +composer -n --working-dir=$dir ${ACTION} --prefer-dist --no-scripts +composer -n --working-dir=$dir info diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/.gitignore b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/.gitignore new file mode 100644 index 00000000..7579f743 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/.gitignore @@ -0,0 +1,2 @@ +vendor +composer.lock diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/composer.json b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/composer.json new file mode 100644 index 00000000..43e4e965 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/composer.json @@ -0,0 +1,61 @@ +{ + "name": "grasmash/yaml-expander", + "description": "Expands internal property references in a yaml file.", + "type": "library", + "require": { + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4", + "dflydev/dot-access-data": "^1.1.0" + }, + "license": "MIT", + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "minimum-stability": "stable", + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7", + "symfony/console": "^2.8" + }, + "scripts": { + "cs": "phpcs -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "cbf": "phpcbf -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "unit": "phpunit", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.4" + }, + "vendor-dir": "../../vendor" + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/src b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/src new file mode 120000 index 00000000..929cb3dc --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/tests b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/tests new file mode 120000 index 00000000..c2ebfe53 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/tests @@ -0,0 +1 @@ +../../tests \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/.gitignore b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/.gitignore new file mode 100644 index 00000000..22d0d82f --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/.gitignore @@ -0,0 +1 @@ +vendor diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.json b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.json new file mode 100644 index 00000000..3052d4e9 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.json @@ -0,0 +1,61 @@ +{ + "name": "grasmash/yaml-expander", + "description": "Expands internal property references in a yaml file.", + "type": "library", + "require": { + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4", + "dflydev/dot-access-data": "^1.1.0" + }, + "license": "MIT", + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "minimum-stability": "stable", + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7", + "symfony/console": "^4.0" + }, + "scripts": { + "cs": "phpcs -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "cbf": "phpcbf -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "unit": "phpunit", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + + }, + "vendor-dir": "../../vendor" + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.lock b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.lock new file mode 100644 index 00000000..d0fe611a --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.lock @@ -0,0 +1,2163 @@ +{ + "_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": "d2caa274a8dbc1766b1756b440be19a0", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "7be8741ce5dce9943f41a9269f6828b66e726776" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7be8741ce5dce9943f41a9269f6828b66e726776", + "reference": "7be8741ce5dce9943f41a9269f6828b66e726776", + "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": "2017-11-29T13:42:03+00:00" + } + ], + "packages-dev": [ + { + "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": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "00ff9f3af3132f0c6b2fb9e0906efee402f0c703" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/00ff9f3af3132f0c6b2fb9e0906efee402f0c703", + "reference": "00ff9f3af3132f0c6b2fb9e0906efee402f0c703", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-01T21:34:53+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": "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.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "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-27T17:38:31+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": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" + }, + "require-dev": { + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" + }, + "suggest": { + "ext-xdebug": "^2.5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.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": "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-04-02T07:44:40+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": "5.7.25", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "4b1c822a68ae6577df38a59eb49b046712ec0f6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b1c822a68ae6577df38a59eb49b046712ec0f6a", + "reference": "4b1c822a68ae6577df38a59eb49b046712ec0f6a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0.3|~2.0", + "symfony/yaml": "~2.1|~3.0|~4.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.7.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": "2017-11-14T14:50:51+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2017-06-30T09:13:00+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": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-10-14T23:16:28+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": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "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.4-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-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "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" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-11-26T07:53:53+00:00" + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-11-19T08:54:04+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "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" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-02-18T15:18:39+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "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": "2016-11-19T07:33:16+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": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "6e6dbc6d2beff8117b974d74274bff02e43c32a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/6e6dbc6d2beff8117b974d74274bff02e43c32a6", + "reference": "6e6dbc6d2beff8117b974d74274bff02e43c32a6", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-20T18:22:57+00:00" + }, + { + "name": "symfony/console", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "5cd0dd461dfc72f59c8405cac32d31e82c7348e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/5cd0dd461dfc72f59c8405cac32d31e82c7348e8", + "reference": "5cd0dd461dfc72f59c8405cac32d31e82c7348e8", + "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": "2017-11-29T13:42:03+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "c9d4a26759ff75a077e4e334315cb632739b661a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/c9d4a26759ff75a077e4e334315cb632739b661a", + "reference": "c9d4a26759ff75a077e4e334315cb632739b661a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-21T14:14:53+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-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": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-09T12:45:29+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "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": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4" + }, + "platform-dev": [] +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/src b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/src new file mode 120000 index 00000000..929cb3dc --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/tests b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/tests new file mode 120000 index 00000000..c2ebfe53 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/tests @@ -0,0 +1 @@ +../../tests \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/src/Expander.php b/lib/composer/vendor/grasmash/yaml-expander/src/Expander.php new file mode 100644 index 00000000..d922db59 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/src/Expander.php @@ -0,0 +1,273 @@ +export(); + } + + /** + * Performs the actual property expansion. + * + * @param Data $data + * A data object, containing the $array. + * @param array $array + * The original, unmodified array. + * @param string $parent_keys + * The parent keys of the current key in dot notation. This is used to + * track the absolute path to the current key in recursive cases. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + */ + protected static function doExpandArrayProperties( + $data, + $array, + $parent_keys = '', + $reference_data = null + ) { + foreach ($array as $key => $value) { + // Boundary condition(s). + if (is_null($value) || is_bool($value)) { + continue; + } + // Recursive case. + if (is_array($value)) { + self::doExpandArrayProperties($data, $value, $parent_keys . "$key.", $reference_data); + } // Base case. + else { + self::expandStringProperties($data, $parent_keys, $reference_data, $value, $key); + } + } + } + + /** + * Expand a single property. + * + * @param Data $data + * A data object, containing the $array. + * @param string $parent_keys + * The parent keys of the current key in dot notation. This is used to + * track the absolute path to the current key in recursive cases. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * @param string $value + * The unexpanded property value. + * @param string $key + * The immediate key of the property. + * + * @return mixed + */ + protected static function expandStringProperties( + $data, + $parent_keys, + $reference_data, + $value, + $key + ) { + // We loop through all placeholders in a given string. + // E.g., '${placeholder1} ${placeholder2}' requires two replacements. + while (strpos($value, '${') !== false) { + $original_value = $value; + $value = preg_replace_callback( + '/\$\{([^\$}]+)\}/', + function ($matches) use ($data, $reference_data) { + return self::expandStringPropertiesCallback( + $matches, + $data, + $reference_data + ); + }, + $value + ); + + // If no replacement occurred at all, break to prevent + // infinite loop. + if ($original_value == $value) { + break; + } + + // Set value on $data object. + if ($parent_keys) { + $full_key = $parent_keys . "$key"; + } else { + $full_key = $key; + } + $data->set($full_key, $value); + } + return $value; + } + + /** + * Expansion callback used by preg_replace_callback() in expandProperty(). + * + * @param array $matches + * An array of matches created by preg_replace_callback(). + * @param Data $data + * A data object containing the complete array being operated upon. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * + * @return mixed + */ + public static function expandStringPropertiesCallback( + $matches, + $data, + $reference_data = null + ) { + $property_name = $matches[1]; + $unexpanded_value = $matches[0]; + + // Use only values within the subject array's data. + if (!$reference_data) { + return self::expandProperty($property_name, $unexpanded_value, $data); + } // Search both the subject array's data and the reference data for a value. + else { + return self::expandPropertyWithReferenceData( + $property_name, + $unexpanded_value, + $data, + $reference_data + ); + } + } + + /** + * Searches both the subject data and the reference data for value. + * + * @param string $property_name + * The name of the value for which to search. + * @param string $unexpanded_value + * The original, unexpanded value, containing the placeholder. + * @param Data $data + * A data object containing the complete array being operated upon. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * + * @return string + * The expanded string. + */ + public static function expandPropertyWithReferenceData( + $property_name, + $unexpanded_value, + $data, + $reference_data + ) { + $expanded_value = self::expandProperty( + $property_name, + $unexpanded_value, + $data + ); + // If the string was not changed using the subject data, try using + // the reference data. + if ($expanded_value == $unexpanded_value) { + $expanded_value = self::expandProperty( + $property_name, + $unexpanded_value, + $reference_data + ); + } + + return $expanded_value; + } + + /** + * Searches a data object for a value. + * + * @param string $property_name + * The name of the value for which to search. + * @param string $unexpanded_value + * The original, unexpanded value, containing the placeholder. + * @param Data $data + * A data object containing possible replacement values. + * + * @return mixed + */ + public static function expandProperty($property_name, $unexpanded_value, $data) + { + if (strpos($property_name, "env.") === 0 && + !$data->has($property_name)) { + $env_key = substr($property_name, 4); + if (getenv($env_key)) { + $data->set($property_name, getenv($env_key)); + } + } + + if (!$data->has($property_name)) { + self::log("Property \${'$property_name'} could not be expanded."); + return $unexpanded_value; + } else { + $expanded_value = $data->get($property_name); + if (is_array($expanded_value)) { + $expanded_value = Yaml::dump($expanded_value, 0); + return $expanded_value; + } + self::log("Expanding property \${'$property_name'} => $expanded_value."); + return $expanded_value; + } + } + + /** + * @param $message + */ + public static function log($message) + { + // print "$message\n"; + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/tests/phpunit/ExpanderTest.php b/lib/composer/vendor/grasmash/yaml-expander/tests/phpunit/ExpanderTest.php new file mode 100644 index 00000000..291d00cc --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/tests/phpunit/ExpanderTest.php @@ -0,0 +1,99 @@ +assertEquals('gomjabbar', $expanded['env-test']); + $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']); + $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']); + $this->assertEquals('Dune by Frank Herbert', $expanded['summary']); + $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']); + $this->assertEquals('Dune', $expanded['product-name']); + $this->assertEquals(Yaml::dump($array['inline-array'], 0), $expanded['expand-array']); + + $expanded = Expander::expandArrayProperties($array, $reference_array); + $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']); + $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']); + } + + /** + * Tests Expander::parse(). + * + * @param string $filename + * @param array $reference_array + * + * @dataProvider providerYaml + */ + public function testParse($filename, $reference_array) + { + $yaml_string = file_get_contents(__DIR__ . "/../resources/$filename"); + $expanded = Expander::parse($yaml_string); + $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']); + $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']); + $this->assertEquals('Dune by Frank Herbert', $expanded['summary']); + $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']); + + $expanded = Expander::parse($yaml_string, $reference_array); + $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']); + $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']); + } + + /** + * @return array + * An array of values to test. + */ + public function providerYaml() + { + return [ + ['valid.yml', [ + 'book' => [ + 'sequel' => 'Dune Messiah' + ] + ]], + ]; + } + + /** + * Tests Expander::expandProperty(). + * + * @dataProvider providerTestExpandProperty + */ + public function testExpandProperty($array, $property_name, $unexpanded_string, $expected) + { + $data = new Data($array); + $expanded_value = Expander::expandProperty($property_name, $unexpanded_string, $data); + + $this->assertEquals($expected, $expanded_value); + } + + /** + * @return array + */ + public function providerTestExpandProperty() + { + return [ + [ ['author' => 'Frank Herbert'], 'author', '${author}', 'Frank Herbert' ], + [ ['book' => ['author' => 'Frank Herbert' ]], 'book.author', '${book.author}', 'Frank Herbert' ], + ]; + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/tests/resources/valid.yml b/lib/composer/vendor/grasmash/yaml-expander/tests/resources/valid.yml new file mode 100644 index 00000000..78e4bc61 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/tests/resources/valid.yml @@ -0,0 +1,35 @@ +# This file should contain only valid YAML. +type: book +book: + title: Dune + author: Frank Herbert + copyright: ${book.author} 1965 + protaganist: ${characters.0.name} + media: + - hardcover + # Use a nested key to reference an external value. + nested-reference: ${book.sequel} +characters: + - name: Paul Atreides + occupation: Kwisatz Haderach + aliases: + - Usul + - Muad'Dib + - The Preacher + - name: Duncan Idaho + occupation: Swordmaster +summary: ${book.title} by ${book.author} +# This is a complete fake property. +publisher: ${not.real.property} +# series.books is not defined in this YAML file, but is passed in to the parser by the application. +sequels: ${book.sequel}, and others. +# Reference one real value and one fake value. +available-products: ${book.media.1}, ${book.media.0} +# Nested property, should resolve to ${book.title} and then 'Dune'. +product-name: ${${type}.title} +# Represent a few more data types and formats. +boolean-value: true +null-value: null +inline-array: [ one, two, three ] +expand-array: ${inline-array} +env-test: ${env.test} \ No newline at end of file diff --git a/lib/composer/vendor/league/container/CHANGELOG.md b/lib/composer/vendor/league/container/CHANGELOG.md index cb2a9251..6e99c738 100644 --- a/lib/composer/vendor/league/container/CHANGELOG.md +++ b/lib/composer/vendor/league/container/CHANGELOG.md @@ -2,6 +2,21 @@ All Notable changes to `League\Container` will be documented in this file +## 2.3.0 + +### Added +- Now implementation of the PSR-11. + +### Changed +- Can now wrap shared objects as `RawArgument`. +- Ability to override shared items. + +### Fixed +- Booleans now recognised as accepted values. +- Various docblock fixes. +- Unused imports removed. +- Unreachable arguments no longer passed. + ## 2.2.0 ### Changed diff --git a/lib/composer/vendor/league/container/README.md b/lib/composer/vendor/league/container/README.md index 536ec6de..3a2e8959 100644 --- a/lib/composer/vendor/league/container/README.md +++ b/lib/composer/vendor/league/container/README.md @@ -16,6 +16,7 @@ please send a patch via pull request. [PSR-1]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md [PSR-2]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md [PSR-4]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md +[PSR-11]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md ## Install @@ -33,6 +34,7 @@ The following versions of PHP are supported by this version. * PHP 5.5 * PHP 5.6 * PHP 7.0 +* PHP 7.1 * HHVM ## Documentation diff --git a/lib/composer/vendor/league/container/composer.json b/lib/composer/vendor/league/container/composer.json index 26a17b7b..8ce66c34 100644 --- a/lib/composer/vendor/league/container/composer.json +++ b/lib/composer/vendor/league/container/composer.json @@ -21,14 +21,15 @@ } ], "require": { - "php": ">=5.4.0", - "container-interop/container-interop": "^1.1" + "php": "^5.4.0 || ^7.0", + "container-interop/container-interop": "^1.2" }, "require-dev": { "phpunit/phpunit" : "4.*" }, "provide": { - "container-interop/container-interop-implementation": "^1.1" + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" }, "replace": { "orno/di": "~2.0" @@ -45,7 +46,7 @@ }, "extra": { "branch-alias": { - "dev-master": "2.x-dev", + "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } } diff --git a/lib/composer/vendor/league/container/src/Argument/ArgumentResolverTrait.php b/lib/composer/vendor/league/container/src/Argument/ArgumentResolverTrait.php index 90d8fb59..a371f82c 100644 --- a/lib/composer/vendor/league/container/src/Argument/ArgumentResolverTrait.php +++ b/lib/composer/vendor/league/container/src/Argument/ArgumentResolverTrait.php @@ -76,7 +76,7 @@ trait ArgumentResolverTrait } /** - * @return ContainerInterface + * @return \League\Container\ContainerInterface */ abstract public function getContainer(); } diff --git a/lib/composer/vendor/league/container/src/Container.php b/lib/composer/vendor/league/container/src/Container.php index 7e937bc0..80a0537d 100644 --- a/lib/composer/vendor/league/container/src/Container.php +++ b/lib/composer/vendor/league/container/src/Container.php @@ -3,6 +3,7 @@ namespace League\Container; use Interop\Container\ContainerInterface as InteropContainerInterface; +use League\Container\Argument\RawArgumentInterface; use League\Container\Definition\DefinitionFactory; use League\Container\Definition\DefinitionFactoryInterface; use League\Container\Definition\DefinitionInterface; @@ -80,24 +81,19 @@ class Container implements ContainerInterface */ public function get($alias, array $args = []) { - $service = $this->getFromThisContainer($alias, $args); + try { + return $this->getFromThisContainer($alias, $args); + } catch (NotFoundException $exception) { + if ($this->providers->provides($alias)) { + $this->providers->register($alias); - if ($service === false && $this->providers->provides($alias)) { - $this->providers->register($alias); - $service = $this->getFromThisContainer($alias, $args); - } + return $this->getFromThisContainer($alias, $args); + } - if ($service !== false) { - return $service; - } + $resolved = $this->getFromDelegate($alias, $args); - if ($resolved = $this->getFromDelegate($alias, $args)) { return $this->inflectors->inflect($resolved); } - - throw new NotFoundException( - sprintf('Alias (%s) is not being managed by the container', $alias) - ); } /** @@ -135,6 +131,10 @@ class Container implements ContainerInterface */ public function add($alias, $concrete = null, $share = false) { + unset($this->shared[$alias]); + unset($this->definitions[$alias]); + unset($this->sharedDefinitions[$alias]); + if (is_null($concrete)) { $concrete = $alias; } @@ -263,7 +263,10 @@ class Container implements ContainerInterface continue; } - return false; + throw new NotFoundException( + sprintf('Alias (%s) is not being managed by the container', $alias) + ); + } /** @@ -276,7 +279,11 @@ class Container implements ContainerInterface protected function getFromThisContainer($alias, array $args = []) { if ($this->hasShared($alias, true)) { - return $this->inflectors->inflect($this->shared[$alias]); + $shared = $this->inflectors->inflect($this->shared[$alias]); + if ($shared instanceof RawArgumentInterface) { + return $shared->getValue(); + } + return $shared; } if (array_key_exists($alias, $this->sharedDefinitions)) { @@ -291,6 +298,8 @@ class Container implements ContainerInterface ); } - return false; + throw new NotFoundException( + sprintf('Alias (%s) is not being managed by the container', $alias) + ); } } diff --git a/lib/composer/vendor/league/container/src/Definition/DefinitionFactory.php b/lib/composer/vendor/league/container/src/Definition/DefinitionFactory.php index 256a336c..8f2c03df 100644 --- a/lib/composer/vendor/league/container/src/Definition/DefinitionFactory.php +++ b/lib/composer/vendor/league/container/src/Definition/DefinitionFactory.php @@ -21,7 +21,7 @@ class DefinitionFactory implements DefinitionFactoryInterface return (new ClassDefinition($alias, $concrete))->setContainer($this->getContainer()); } - // if the item is not defineable we just return the value to be stored + // if the item is not definable we just return the value to be stored // in the container as an arbitrary value/instance return $concrete; } diff --git a/lib/composer/vendor/league/container/src/ReflectionContainer.php b/lib/composer/vendor/league/container/src/ReflectionContainer.php index 5eb6ce4a..c6d9222b 100644 --- a/lib/composer/vendor/league/container/src/ReflectionContainer.php +++ b/lib/composer/vendor/league/container/src/ReflectionContainer.php @@ -6,7 +6,6 @@ use League\Container\Argument\ArgumentResolverInterface; use League\Container\Argument\ArgumentResolverTrait; use League\Container\Exception\NotFoundException; use ReflectionClass; -use ReflectionException; use ReflectionFunction; use ReflectionMethod; @@ -62,6 +61,10 @@ class ReflectionContainer implements } if (is_array($callable)) { + if (is_string($callable[0])) { + $callable[0] = $this->getContainer()->get($callable[0]); + } + $reflection = new ReflectionMethod($callable[0], $callable[1]); if ($reflection->isStatic()) { @@ -71,6 +74,12 @@ class ReflectionContainer implements return $reflection->invokeArgs($callable[0], $this->reflectArguments($reflection, $args)); } + if (is_object($callable)) { + $reflection = new ReflectionMethod($callable, '__invoke'); + + return $reflection->invokeArgs($callable, $this->reflectArguments($reflection, $args)); + } + $reflection = new ReflectionFunction($callable); return $reflection->invokeArgs($this->reflectArguments($reflection, $args)); diff --git a/lib/composer/vendor/league/container/src/ServiceProvider/ServiceProviderAggregateInterface.php b/lib/composer/vendor/league/container/src/ServiceProvider/ServiceProviderAggregateInterface.php index 0825ff38..f7b35131 100644 --- a/lib/composer/vendor/league/container/src/ServiceProvider/ServiceProviderAggregateInterface.php +++ b/lib/composer/vendor/league/container/src/ServiceProvider/ServiceProviderAggregateInterface.php @@ -25,8 +25,8 @@ interface ServiceProviderAggregateInterface extends ContainerAwareInterface /** * Invokes the register method of a provider that provides a specific service. * - * @param string $provider + * @param string $service * @return void */ - public function register($provider); + public function register($service); } diff --git a/lib/composer/vendor/monolog/monolog/.php_cs b/lib/composer/vendor/monolog/monolog/.php_cs index 2511e98c..8c11b234 100644 --- a/lib/composer/vendor/monolog/monolog/.php_cs +++ b/lib/composer/vendor/monolog/monolog/.php_cs @@ -1,15 +1,15 @@ -files() - ->name('*.php') - ->in(__DIR__.'/src') - ->in(__DIR__.'/tests') -; - -return Symfony\CS\Config\Config::create() - ->fixers(array( - 'psr0', 'encoding', 'short_tag', 'braces', 'elseif', 'eof_ending', 'function_declaration', 'indentation', 'line_after_namespace', 'linefeed', 'lowercase_constants', 'lowercase_keywords', 'multiple_use', 'php_closing_tag', 'trailing_spaces', 'visibility', 'duplicate_semicolon', 'extra_empty_lines', 'include', 'namespace_no_leading_whitespace', 'object_operator', 'operators_spaces', 'phpdoc_params', 'return', 'single_array_no_trailing_comma', 'spaces_cast', 'standardize_not_equal', 'ternary_spaces', 'unused_use', 'whitespacy_lines', - )) - ->finder($finder) -; +files() + ->name('*.php') + ->in(__DIR__.'/src') + ->in(__DIR__.'/tests') +; + +return Symfony\CS\Config\Config::create() + ->fixers(array( + 'psr0', 'encoding', 'short_tag', 'braces', 'elseif', 'eof_ending', 'function_declaration', 'indentation', 'line_after_namespace', 'linefeed', 'lowercase_constants', 'lowercase_keywords', 'multiple_use', 'php_closing_tag', 'trailing_spaces', 'visibility', 'duplicate_semicolon', 'extra_empty_lines', 'include', 'namespace_no_leading_whitespace', 'object_operator', 'operators_spaces', 'phpdoc_params', 'return', 'single_array_no_trailing_comma', 'spaces_cast', 'standardize_not_equal', 'ternary_spaces', 'unused_use', 'whitespacy_lines', + )) + ->finder($finder) +; diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php index 5243e4c0..6eaaa9d4 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php @@ -44,7 +44,7 @@ class FlowdockHandler extends SocketHandler throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler'); } - parent::__construct('ssl://Api.flowdock.com:443', $level, $bubble); + parent::__construct('ssl://api.flowdock.com:443', $level, $bubble); $this->apiToken = $apiToken; } @@ -93,7 +93,7 @@ class FlowdockHandler extends SocketHandler private function buildHeader($content) { $header = "POST /v1/messages/team_inbox/" . $this->apiToken . " HTTP/1.1\r\n"; - $header .= "Host: Api.flowdock.com\r\n"; + $header .= "Host: api.flowdock.com\r\n"; $header .= "Content-Type: application/json\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; $header .= "\r\n"; diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php index f4888882..185e86e0 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php @@ -14,7 +14,7 @@ namespace Monolog\Handler; use Monolog\Logger; /** - * Sends notifications through the hipchat Api to a hipchat room + * Sends notifications through the hipchat api to a hipchat room * * Notes: * API token - HipChat API token @@ -78,7 +78,7 @@ class HipChatHandler extends SocketHandler * @param string $format The format of the messages (default to text, can be set to html if you have html in the messages) * @param string $host The HipChat server hostname. */ - public function __construct($token, $room, $name = 'Monolog', $notify = false, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $format = 'text', $host = 'Api.hipchat.com') + public function __construct($token, $room, $name = 'Monolog', $notify = false, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $format = 'text', $host = 'api.hipchat.com') { if (!$this->validateStringLength($name, static::MAXIMUM_NAME_LENGTH)) { throw new \InvalidArgumentException('The supplied name is too long. HipChat\'s v1 API supports names up to 15 UTF-8 characters.'); diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php index cb3118b5..60a2901e 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php @@ -54,7 +54,7 @@ class MandrillHandler extends MailHandler $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/Api/1.0/messages/send-raw.json'); + curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array( diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php index 9e053183..cd2fcfa3 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php @@ -14,7 +14,7 @@ namespace Monolog\Handler; use Monolog\Logger; /** - * Sends notifications through the pushover Api to mobile phones + * Sends notifications through the pushover api to mobile phones * * @author Sebastian Göttschkes * @see https://www.pushover.net/api @@ -53,7 +53,7 @@ class PushoverHandler extends SocketHandler ); /** - * Sounds the Api supports by default + * Sounds the api supports by default * @see https://pushover.net/api#sounds * @var array */ @@ -64,7 +64,7 @@ class PushoverHandler extends SocketHandler ); /** - * @param string $token Pushover Api token + * @param string $token Pushover api token * @param string|array $users Pushover user id or array of ids the message will be sent to * @param string $title Title sent to the Pushover API * @param integer $level The minimum logging level at which this handler will be triggered @@ -80,7 +80,7 @@ class PushoverHandler extends SocketHandler */ public function __construct($token, $users, $title = null, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $highPriorityLevel = Logger::CRITICAL, $emergencyLevel = Logger::EMERGENCY, $retry = 30, $expire = 25200) { - $connectionString = $useSSL ? 'ssl://Api.pushover.net:443' : 'Api.pushover.net:80'; + $connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80'; parent::__construct($connectionString, $level, $bubble); $this->token = $token; @@ -140,7 +140,7 @@ class PushoverHandler extends SocketHandler private function buildHeader($content) { $header = "POST /1/messages.json HTTP/1.1\r\n"; - $header .= "Host: Api.pushover.net\r\n"; + $header .= "Host: api.pushover.net\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; $header .= "\r\n"; diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php index d0b48088..7328deee 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php @@ -218,7 +218,7 @@ class SlackHandler extends SocketHandler */ private function buildHeader($content) { - $header = "POST /Api/chat.postMessage HTTP/1.1\r\n"; + $header = "POST /api/chat.postMessage HTTP/1.1\r\n"; $header .= "Host: slack.com\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Registry.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Registry.php index de28cf22..923b7745 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Registry.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Registry.php @@ -21,14 +21,14 @@ use InvalidArgumentException; * * * $application = new Monolog\Logger('application'); - * $Api = new Monolog\Logger('Api'); + * $api = new Monolog\Logger('api'); * * Monolog\Registry::addLogger($application); - * Monolog\Registry::addLogger($Api); + * Monolog\Registry::addLogger($api); * * function testLogger() * { - * Monolog\Registry::Api()->addError('Sent to $Api Logger instance'); + * Monolog\Registry::api()->addError('Sent to $api Logger instance'); * Monolog\Registry::application()->addError('Sent to $application Logger instance'); * } * diff --git a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php index f027f198..4b120d51 100644 --- a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php +++ b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php @@ -45,7 +45,7 @@ class FlowdockHandlerTest extends TestCase fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/v1\/messages\/team_inbox\/.* HTTP\/1.1\\r\\nHost: Api.flowdock.com\\r\\nContent-Type: application\/json\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('/POST \/v1\/messages\/team_inbox\/.* HTTP\/1.1\\r\\nHost: api.flowdock.com\\r\\nContent-Type: application\/json\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); return $content; } diff --git a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php index dba87f4f..49f1dfbd 100644 --- a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php +++ b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php @@ -30,7 +30,7 @@ class HipChatHandlerTest extends TestCase fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/v1\/rooms\/message\?format=json&auth_token=.* HTTP\/1.1\\r\\nHost: Api.hipchat.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('/POST \/v1\/rooms\/message\?format=json&auth_token=.* HTTP\/1.1\\r\\nHost: api.hipchat.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); return $content; } @@ -141,7 +141,7 @@ class HipChatHandlerTest extends TestCase ); } - private function createHandler($token = 'myToken', $room = 'room1', $name = 'Monolog', $notify = false, $host = 'Api.hipchat.com') + private function createHandler($token = 'myToken', $room = 'room1', $name = 'Monolog', $notify = false, $host = 'api.hipchat.com') { $constructorArgs = array($token, $room, $name, $notify, Logger::DEBUG, true, true, 'text', $host); $this->res = fopen('php://memory', 'a'); diff --git a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php index e8228aa1..89408236 100644 --- a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php +++ b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php @@ -33,7 +33,7 @@ class PushoverHandlerTest extends TestCase fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/1\/messages.json HTTP\/1.1\\r\\nHost: Api.pushover.net\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('/POST \/1\/messages.json HTTP\/1.1\\r\\nHost: api.pushover.net\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); return $content; } diff --git a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php index 310d1ec5..d657fae3 100644 --- a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php +++ b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php @@ -44,7 +44,7 @@ class SlackHandlerTest extends TestCase fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/Api\/chat.postMessage HTTP\/1.1\\r\\nHost: slack.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('/POST \/api\/chat.postMessage HTTP\/1.1\\r\\nHost: slack.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); } public function testWriteContent() diff --git a/lib/composer/vendor/myclabs/deep-copy/.gitignore b/lib/composer/vendor/myclabs/deep-copy/.gitignore index 93541710..eef72f75 100755 --- a/lib/composer/vendor/myclabs/deep-copy/.gitignore +++ b/lib/composer/vendor/myclabs/deep-copy/.gitignore @@ -1,6 +1,3 @@ -.DS_Store -.idea/* - -vendor/* -composer.phar -composer.lock +/composer.phar +/composer.lock +/vendor/* diff --git a/lib/composer/vendor/myclabs/deep-copy/.travis.yml b/lib/composer/vendor/myclabs/deep-copy/.travis.yml index 347c6e75..89dc02af 100755 --- a/lib/composer/vendor/myclabs/deep-copy/.travis.yml +++ b/lib/composer/vendor/myclabs/deep-copy/.travis.yml @@ -1,30 +1,33 @@ language: php +sudo: false + php: - - '5.5' - '5.6' - '7.0' - '7.1' - nightly - - hhvm matrix: fast_finish: true include: - - php: '5.4' + - php: '5.6' env: COMPOSER_FLAGS="--prefer-lowest" allow_failures: - php: nightly - - php: hhvm + +cache: + directories: + - $HOME/.composer/cache/files before_install: - | - if [ "$TRAVIS_PHP_VERSION" = "nightly" ] || "$TRAVIS_PHP_VERSION" = "7.1" ]; then + if [ "$TRAVIS_PHP_VERSION" = "nightly" ]; then COMPOSER_FLAGS="$COMPOSER_FLAGS --ignore-platform-reqs" fi; install: - - composer update -n --prefer-dist $COMPOSER_FLAGS + - composer update --no-interaction --no-progress --no-suggest --prefer-dist $COMPOSER_FLAGS - wget https://github.com/satooshi/php-coveralls/releases/download/v1.0.0/coveralls.phar before_script: diff --git a/lib/composer/vendor/myclabs/deep-copy/README.md b/lib/composer/vendor/myclabs/deep-copy/README.md index 4cd11ed1..7f010df2 100644 --- a/lib/composer/vendor/myclabs/deep-copy/README.md +++ b/lib/composer/vendor/myclabs/deep-copy/README.md @@ -2,7 +2,9 @@ DeepCopy helps you create deep copies (clones) of your objects. It is designed to handle cycles in the association graph. -[![Build Status](https://travis-ci.org/myclabs/DeepCopy.png?branch=master)](https://travis-ci.org/myclabs/DeepCopy) [![Coverage Status](https://coveralls.io/repos/myclabs/DeepCopy/badge.png?branch=master)](https://coveralls.io/r/myclabs/DeepCopy?branch=master) [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/myclabs/DeepCopy/badges/quality-score.png?s=2747100c19b275f93a777e3297c6c12d1b68b934)](https://scrutinizer-ci.com/g/myclabs/DeepCopy/) +[![Build Status](https://travis-ci.org/myclabs/DeepCopy.png?branch=master)](https://travis-ci.org/myclabs/DeepCopy) +[![Coverage Status](https://coveralls.io/repos/myclabs/DeepCopy/badge.png?branch=master)](https://coveralls.io/r/myclabs/DeepCopy?branch=master) +[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/myclabs/DeepCopy/badges/quality-score.png?s=2747100c19b275f93a777e3297c6c12d1b68b934)](https://scrutinizer-ci.com/g/myclabs/DeepCopy/) [![Total Downloads](https://poser.pugx.org/myclabs/deep-copy/downloads.svg)](https://packagist.org/packages/myclabs/deep-copy) @@ -20,15 +22,18 @@ DeepCopy helps you create deep copies (clones) of your objects. It is designed t 1. [Specific property](#specific-property) 1. [Type](#type) 1. [Filters](#filters) - 1. [`SetNullFilter`](#setnullfilter) - 1. [`KeepFilter`](#keepfilter) - 1. [`ReplaceFilter`](#replacefilter) - 1. [`ShallowCopyFilter`](#doctrinecollectionfilter) - 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter) - 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter) + 1. [`SetNullFilter`](#setnullfilter-filter) + 1. [`KeepFilter`](#keepfilter-filter) + 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter-filter) + 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter-filter) + 1. [`DoctrineProxyFilter`](#doctrineproxyfilter-filter) + 1. [`ReplaceFilter`](#replacefilter-type-filter) + 1. [`ShallowCopyFilter`](#doctrinecollectionfilter-type-filter) +1. [Edge cases](#edge-cases) 1. [Contributing](#contributing) 1. [Tests](#tests) + ## How? Install with Composer: @@ -42,8 +47,8 @@ Use simply: ```php use DeepCopy\DeepCopy; -$deepCopy = new DeepCopy(); -$myCopy = $deepCopy->copy($myObject); +$copier = new DeepCopy(); +$myCopy = $copier->copy($myObject); ``` @@ -57,7 +62,8 @@ $myCopy = clone $myObject; - How do you create **deep** copies of your objects (i.e. copying also all the objects referenced in the properties)? -You use [`__clone()`](http://www.php.net/manual/en/language.oop5.cloning.php#object.clone) and implement the behavior yourself. +You use [`__clone()`](http://www.php.net/manual/en/language.oop5.cloning.php#object.clone) and implement the behavior +yourself. - But how do you handle **cycles** in the association graph? @@ -65,37 +71,82 @@ Now you're in for a big mess :( ![association graph](doc/graph.png) + ### Using simply `clone` ![Using clone](doc/clone.png) + ### Overridding `__clone()` ![Overridding __clone](doc/deep-clone.png) + ### With `DeepCopy` ![With DeepCopy](doc/deep-copy.png) + ## How it works -DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it keeps a hash map of all instances and thus preserves the object graph. +DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it +keeps a hash map of all instances and thus preserves the object graph. + +To use it: + +```php +use function DeepCopy\deep_copy; + +$copy = deep_copy($var); +``` + +Alternatively, you can create your own `DeepCopy` instance to configure it differently for example: + +```php +use DeepCopy\DeepCopy; + +$copier = new DeepCopy(true); + +$copy = $copier->copy($var); +``` + +You may want to roll your own deep copy function: + +```php +namespace Acme; + +use DeepCopy\DeepCopy; + +function deep_copy($var) +{ + static $copier = null; + + if (null === $copier) { + $copier = new DeepCopy(true); + } + + return $copier->copy($var); +} +``` + ## Going further You can add filters to customize the copy process. -The method to add a filter is `$deepCopy->addFilter($filter, $matcher)`, +The method to add a filter is `DeepCopy\DeepCopy::addFilter($filter, $matcher)`, with `$filter` implementing `DeepCopy\Filter\Filter` and `$matcher` implementing `DeepCopy\Matcher\Matcher`. We provide some generic filters and matchers. + ### Matchers - `DeepCopy\Matcher` applies on a object attribute. - `DeepCopy\TypeMatcher` applies on any element found in graph, including array elements. + #### Property name The `PropertyNameMatcher` will match a property by its name: @@ -103,10 +154,11 @@ The `PropertyNameMatcher` will match a property by its name: ```php use DeepCopy\Matcher\PropertyNameMatcher; +// Will apply a filter to any property of any objects named "id" $matcher = new PropertyNameMatcher('id'); -// will apply a filter to any property of any objects named "id" ``` + #### Specific property The `PropertyMatcher` will match a specific property of a specific class: @@ -114,46 +166,53 @@ The `PropertyMatcher` will match a specific property of a specific class: ```php use DeepCopy\Matcher\PropertyMatcher; +// Will apply a filter to the property "id" of any objects of the class "MyClass" $matcher = new PropertyMatcher('MyClass', 'id'); -// will apply a filter to the property "id" of any objects of the class "MyClass" ``` + #### Type -The `TypeMatcher` will match any element by its type (instance of a class or any value that could be parameter of [gettype()](http://php.net/manual/en/function.gettype.php) function): +The `TypeMatcher` will match any element by its type (instance of a class or any value that could be parameter of +[gettype()](http://php.net/manual/en/function.gettype.php) function): ```php use DeepCopy\TypeMatcher\TypeMatcher; +// Will apply a filter to any object that is an instance of Doctrine\Common\Collections\Collection $matcher = new TypeMatcher('Doctrine\Common\Collections\Collection'); -// will apply a filter to any object that is an instance of Doctrine\Common\Collections\Collection ``` + ### Filters - - `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher`. - - `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher`. +- `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher` +- `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher` -#### `SetNullFilter` -Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have any ID: +#### `SetNullFilter` (filter) + +Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have +any ID: ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\SetNullFilter; use DeepCopy\Matcher\PropertyNameMatcher; -$myObject = MyClass::load(123); -echo $myObject->id; // 123 +$object = MyClass::load(123); +echo $object->id; // 123 -$deepCopy = new DeepCopy(); -$deepCopy->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); -$myCopy = $deepCopy->copy($myObject); +$copier = new DeepCopy(); +$copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); -echo $myCopy->id; // null +$copy = $copier->copy($object); + +echo $copy->id; // null ``` -#### `KeepFilter` + +#### `KeepFilter` (filter) If you want a property to remain untouched (for example, an association to an object): @@ -162,53 +221,114 @@ use DeepCopy\DeepCopy; use DeepCopy\Filter\KeepFilter; use DeepCopy\Matcher\PropertyMatcher; -$deepCopy = new DeepCopy(); -$deepCopy->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category')); -$myCopy = $deepCopy->copy($myObject); +$copier = new DeepCopy(); +$copier->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category')); -// $myCopy->category has not been touched +$copy = $copier->copy($object); +// $copy->category has not been touched ``` -#### `ReplaceFilter` - 1. If you want to replace the value of a property: +#### `DoctrineCollectionFilter` (filter) - ```php - use DeepCopy\DeepCopy; - use DeepCopy\Filter\ReplaceFilter; - use DeepCopy\Matcher\PropertyMatcher; +If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`: - $deepCopy = new DeepCopy(); - $callback = function ($currentValue) { - return $currentValue . ' (copy)' - }; - $deepCopy->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title')); - $myCopy = $deepCopy->copy($myObject); +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\Doctrine\DoctrineCollectionFilter; +use DeepCopy\Matcher\PropertyTypeMatcher; - // $myCopy->title will contain the data returned by the callback, e.g. 'The title (copy)' - ``` +$copier = new DeepCopy(); +$copier->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collections\Collection')); - 2. If you want to replace whole element: +$copy = $copier->copy($object); +``` - ```php - use DeepCopy\DeepCopy; - use DeepCopy\TypeFilter\ReplaceFilter; - use DeepCopy\TypeMatcher\TypeMatcher; - $deepCopy = new DeepCopy(); - $callback = function (MyClass $myClass) { - return get_class($myClass); - }; - $deepCopy->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass')); - $myCopy = $deepCopy->copy(array(new MyClass, 'some string', new MyClass)); +#### `DoctrineEmptyCollectionFilter` (filter) - // $myCopy will contain ['MyClass', 'some stirng', 'MyClass'] - ``` +If you use Doctrine and want to copy an entity who contains a `Collection` that you want to be reset, you can use the +`DoctrineEmptyCollectionFilter` + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\Doctrine\DoctrineEmptyCollectionFilter; +use DeepCopy\Matcher\PropertyMatcher; + +$copier = new DeepCopy(); +$copier->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty')); + +$copy = $copier->copy($object); + +// $copy->myProperty will return an empty collection +``` + + +#### `DoctrineProxyFilter` (filter) + +If you use Doctrine and use cloning on lazy loaded entities, you might encounter errors mentioning missing fields on a +Doctrine proxy class (...\\\_\_CG\_\_\Proxy). +You can use the `DoctrineProxyFilter` to load the actual entity behind the Doctrine proxy class. +**Make sure, though, to put this as one of your very first filters in the filter chain so that the entity is loaded +before other filters are applied!** + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; +use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; + +$copier = new DeepCopy(); +$copier->addFilter(new DoctrineProxyFilter(), new DoctrineProxyMatcher()); + +$copy = $copier->copy($object); + +// $copy should now contain a clone of all entities, including those that were not yet fully loaded. +``` + + +#### `ReplaceFilter` (type filter) + +1. If you want to replace the value of a property: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\ReplaceFilter; +use DeepCopy\Matcher\PropertyMatcher; + +$copier = new DeepCopy(); +$callback = function ($currentValue) { + return $currentValue . ' (copy)' +}; +$copier->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title')); + +$copy = $copier->copy($object); + +// $copy->title will contain the data returned by the callback, e.g. 'The title (copy)' +``` + +2. If you want to replace whole element: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\TypeFilter\ReplaceFilter; +use DeepCopy\TypeMatcher\TypeMatcher; + +$copier = new DeepCopy(); +$callback = function (MyClass $myClass) { + return get_class($myClass); +}; +$copier->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass')); + +$copy = $copier->copy([new MyClass, 'some string', new MyClass]); + +// $copy will contain ['MyClass', 'some string', 'MyClass'] +``` The `$callback` parameter of the `ReplaceFilter` constructor accepts any PHP callable. -#### `ShallowCopyFilter` + +#### `ShallowCopyFilter` (type filter) Stop *DeepCopy* from recursively copying element, using standard `clone` instead: @@ -225,47 +345,28 @@ $this->deepCopy->addTypeFilter( ); $myServiceWithMocks = new MyService(m::mock(MyDependency1::class), m::mock(MyDependency2::class)); -// all mocks will be just cloned, not deep-copied +// All mocks will be just cloned, not deep copied ``` -#### `DoctrineCollectionFilter` -If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`: +## Edge cases -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\Doctrine\DoctrineCollectionFilter; -use DeepCopy\Matcher\PropertyTypeMatcher; +The following structures cannot be deep-copied with PHP Reflection. As a result they are shallow cloned and filters are +not applied. There is two ways for you to handle them: -$deepCopy = new DeepCopy(); -$deepCopy->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collections\Collection')); -$myCopy = $deepCopy->copy($myObject); -``` +- Implement your own `__clone()` method +- Use a filter with a type matcher -#### `DoctrineEmptyCollectionFilter` - -If you use Doctrine and want to copy an entity who contains a `Collection` that you want to be reset, you can use the `DoctrineEmptyCollectionFilter` - -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\Doctrine\DoctrineEmptyCollectionFilter; -use DeepCopy\Matcher\PropertyMatcher; - -$deepCopy = new DeepCopy(); -$deepCopy->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty')); -$myCopy = $deepCopy->copy($myObject); - -// $myCopy->myProperty will return an empty collection -``` ## Contributing DeepCopy is distributed under the MIT license. + ### Tests Running the tests is simple: ```php -phpunit +vendor/bin/phpunit ``` diff --git a/lib/composer/vendor/myclabs/deep-copy/composer.json b/lib/composer/vendor/myclabs/deep-copy/composer.json index d20287ab..d5d3a779 100644 --- a/lib/composer/vendor/myclabs/deep-copy/composer.json +++ b/lib/composer/vendor/myclabs/deep-copy/composer.json @@ -3,19 +3,33 @@ "type": "library", "description": "Create deep copies (clones) of your objects", "keywords": ["clone", "copy", "duplicate", "object", "object graph"], - "homepage": "https://github.com/myclabs/DeepCopy", "license": "MIT", + "autoload": { - "psr-4": { "DeepCopy\\": "src/DeepCopy/" } + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "autoload-dev": { - "psr-4": { "DeepCopyTest\\": "tests/DeepCopyTest/" } + "psr-4": { + "DeepCopy\\": "fixtures/", + "DeepCopyTest\\": "tests/DeepCopyTest/" + } }, + "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + + "config": { + "sort-packages": true } } diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/A.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/A.php new file mode 100644 index 00000000..648d5dff --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/A.php @@ -0,0 +1,20 @@ +aProp; + } + + public function setAProp($prop) + { + $this->aProp = $prop; + + return $this; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/B.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/B.php new file mode 100644 index 00000000..462bb44e --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/B.php @@ -0,0 +1,20 @@ +bProp; + } + + public function setBProp($prop) + { + $this->bProp = $prop; + + return $this; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f002/A.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f002/A.php new file mode 100644 index 00000000..d9aa5c35 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f002/A.php @@ -0,0 +1,33 @@ +prop1; + } + + public function setProp1($prop) + { + $this->prop1 = $prop; + + return $this; + } + + public function getProp2() + { + return $this->prop2; + } + + public function setProp2($prop) + { + $this->prop2 = $prop; + + return $this; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f003/Foo.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f003/Foo.php new file mode 100644 index 00000000..9cd76224 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f003/Foo.php @@ -0,0 +1,26 @@ +name = $name; + } + + public function getProp() + { + return $this->prop; + } + + public function setProp($prop) + { + $this->prop = $prop; + + return $this; + } +} \ No newline at end of file diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php new file mode 100644 index 00000000..82c6c67c --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php @@ -0,0 +1,13 @@ +cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/A.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/A.php new file mode 100644 index 00000000..d9efb116 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/A.php @@ -0,0 +1,26 @@ +aProp; + } + + public function setAProp($prop) + { + $this->aProp = $prop; + + return $this; + } + + public function __clone() + { + $this->cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/B.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/B.php new file mode 100644 index 00000000..1f80b3d4 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/B.php @@ -0,0 +1,26 @@ +bProp; + } + + public function setBProp($prop) + { + $this->bProp = $prop; + + return $this; + } + + public function __clone() + { + $this->cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php new file mode 100644 index 00000000..e16bc6aa --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php @@ -0,0 +1,15 @@ +cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php new file mode 100644 index 00000000..6f4e61fe --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php @@ -0,0 +1,15 @@ +cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/A.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/A.php new file mode 100644 index 00000000..88471d01 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/A.php @@ -0,0 +1,18 @@ +foo = $foo; + } + + public function getFoo() + { + return $this->foo; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/B.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/B.php new file mode 100644 index 00000000..6053092d --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/B.php @@ -0,0 +1,7 @@ + Filter, 'matcher' => Matcher] pairs. */ private $filters = []; /** * Type Filters to apply. - * @var array + * + * @var array Array of ['filter' => Filter, 'matcher' => Matcher] pairs. */ private $typeFilters = []; + /** + * @var bool + */ private $skipUncloneable = false; /** @@ -48,23 +59,29 @@ class DeepCopy { $this->useCloneMethod = $useCloneMethod; - $this->addTypeFilter(new SplDoublyLinkedList($this), new TypeMatcher('\SplDoublyLinkedList')); + $this->addTypeFilter(new DateIntervalFilter(), new TypeMatcher(DateInterval::class)); + $this->addTypeFilter(new SplDoublyLinkedListFilter($this), new TypeMatcher(SplDoublyLinkedList::class)); } /** - * Cloning uncloneable properties won't throw exception. + * If enabled, will not throw an exception when coming across an uncloneable property. + * * @param $skipUncloneable + * * @return $this */ public function skipUncloneable($skipUncloneable = true) { $this->skipUncloneable = $skipUncloneable; + return $this; } /** - * Perform a deep copy of the object. + * Deep copies the given object. + * * @param mixed $object + * * @return mixed */ public function copy($object) @@ -90,7 +107,6 @@ class DeepCopy ]; } - private function recursiveCopy($var) { // Matches Type Filter @@ -102,14 +118,17 @@ class DeepCopy if (is_resource($var)) { return $var; } + // Array if (is_array($var)) { return $this->copyArray($var); } + // Scalar if (! is_object($var)) { return $var; } + // Object return $this->copyObject($var); } @@ -129,8 +148,12 @@ class DeepCopy } /** - * Copy an object + * Copies an object. + * * @param object $object + * + * @throws CloneException + * * @return object */ private function copyObject($object) @@ -141,29 +164,35 @@ class DeepCopy return $this->hashMap[$objectHash]; } - $reflectedObject = new \ReflectionObject($object); - - if (false === $isCloneable = $reflectedObject->isCloneable() and $this->skipUncloneable) { - $this->hashMap[$objectHash] = $object; - return $object; - } + $reflectedObject = new ReflectionObject($object); + $isCloneable = $reflectedObject->isCloneable(); if (false === $isCloneable) { - throw new CloneException(sprintf( - 'Class "%s" is not cloneable.', - $reflectedObject->getName() - )); + if ($this->skipUncloneable) { + $this->hashMap[$objectHash] = $object; + + return $object; + } + + throw new CloneException( + sprintf( + 'The class "%s" is not cloneable.', + $reflectedObject->getName() + ) + ); } $newObject = clone $object; $this->hashMap[$objectHash] = $newObject; - if ($this->useCloneMethod && $reflectedObject->hasMethod('__clone')) { - return $object; - } - if ($newObject instanceof \DateTimeInterface) { + if ($this->useCloneMethod && $reflectedObject->hasMethod('__clone')) { return $newObject; } + + if ($newObject instanceof DateTimeInterface || $newObject instanceof DateTimeZone) { + return $newObject; + } + foreach (ReflectionHelper::getProperties($reflectedObject) as $property) { $this->copyObjectProperty($newObject, $property); } @@ -193,6 +222,7 @@ class DeepCopy return $this->recursiveCopy($object); } ); + // If a filter matches, we stop processing this property return; } @@ -206,10 +236,12 @@ class DeepCopy } /** - * Returns first filter that matches variable, NULL if no such filter found. + * Returns first filter that matches variable, `null` if no such filter found. + * * @param array $filterRecords Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and * 'matcher' with value of type {@see TypeMatcher} * @param mixed $var + * * @return TypeFilter|null */ private function getFirstMatchedTypeFilter(array $filterRecords, $var) @@ -228,10 +260,13 @@ class DeepCopy } /** - * Returns first element that matches predicate, NULL if no such element found. - * @param array $elements + * Returns first element that matches predicate, `null` if no such element found. + * + * @param array $elements Array of ['filter' => Filter, 'matcher' => Matcher] pairs. * @param callable $predicate Predicate arguments are: element. - * @return mixed|null + * + * @return array|null Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and 'matcher' + * with value of type {@see TypeMatcher} or `null`. */ private function first(array $elements, callable $predicate) { diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php index dd3b617b..c046706a 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php @@ -1,6 +1,9 @@ setAccessible(true); $oldCollection = $reflectionProperty->getValue($object); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php index f9b3f7ac..7b33fd54 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php @@ -3,12 +3,16 @@ namespace DeepCopy\Filter\Doctrine; use DeepCopy\Filter\Filter; +use DeepCopy\Reflection\ReflectionHelper; use Doctrine\Common\Collections\ArrayCollection; +/** + * @final + */ class DoctrineEmptyCollectionFilter implements Filter { /** - * Apply the filter to the object. + * Sets the object property to an empty doctrine collection. * * @param object $object * @param string $property @@ -16,7 +20,7 @@ class DoctrineEmptyCollectionFilter implements Filter */ public function apply($object, $property, $objectCopier) { - $reflectionProperty = new \ReflectionProperty($object, $property); + $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($object, new ArrayCollection()); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php new file mode 100644 index 00000000..8bee8f76 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php @@ -0,0 +1,22 @@ +__load(); + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php index 48076a1b..85ba18ce 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php @@ -8,7 +8,8 @@ namespace DeepCopy\Filter; interface Filter { /** - * Apply the filter to the object. + * Applies the filter to the object. + * * @param object $object * @param string $property * @param callable $objectCopier diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php index 14c55e75..4b11a081 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php @@ -2,12 +2,11 @@ namespace DeepCopy\Filter; -/** - * Keep the value of a property - */ class KeepFilter implements Filter { /** + * Keeps the value of the object property. + * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php index fce7114b..7aca593b 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php @@ -2,8 +2,10 @@ namespace DeepCopy\Filter; +use DeepCopy\Reflection\ReflectionHelper; + /** - * Replace the value of a property + * @final */ class ReplaceFilter implements Filter { @@ -21,11 +23,13 @@ class ReplaceFilter implements Filter } /** + * Replaces the object property by the result of the callback called with the object property. + * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) { - $reflectionProperty = new \ReflectionProperty($object, $property); + $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $value = call_user_func($this->callback, $reflectionProperty->getValue($object)); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php index d48f15b6..bea86b88 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php @@ -2,19 +2,21 @@ namespace DeepCopy\Filter; -use ReflectionProperty; +use DeepCopy\Reflection\ReflectionHelper; /** - * Set a null value for a property + * @final */ class SetNullFilter implements Filter { /** + * Sets the object property to null. + * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) { - $reflectionProperty = new ReflectionProperty($object, $property); + $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($object, null); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php new file mode 100644 index 00000000..ec8856f5 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php @@ -0,0 +1,22 @@ +class) && ($property == $this->property); + return ($object instanceof $this->class) && $property == $this->property; } } diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php index 9d9575f0..c8ec0d2b 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php @@ -3,7 +3,7 @@ namespace DeepCopy\Matcher; /** - * Match a property by its name + * @final */ class PropertyNameMatcher implements Matcher { @@ -21,6 +21,8 @@ class PropertyNameMatcher implements Matcher } /** + * Matches a property by its name. + * * {@inheritdoc} */ public function matches($object, $property) diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php index 6935541d..a6b0c0bc 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php @@ -2,13 +2,16 @@ namespace DeepCopy\Matcher; -use ReflectionProperty; +use DeepCopy\Reflection\ReflectionHelper; +use ReflectionException; /** - * Match a property by its type + * Matches a property by its type. * - * @deprecated It is recommended to use {@see DeepCopy\TypeFilter\TypeFilter} instead, as it applies on all occurrences - * of given type in copied context (eg. array elements), not just on object properties. + * It is recommended to use {@see DeepCopy\TypeFilter\TypeFilter} instead, as it applies on all occurrences + * of given type in copied context (eg. array elements), not just on object properties. + * + * @final */ class PropertyTypeMatcher implements Matcher { @@ -30,7 +33,12 @@ class PropertyTypeMatcher implements Matcher */ public function matches($object, $property) { - $reflectionProperty = new ReflectionProperty($object, $property); + try { + $reflectionProperty = ReflectionHelper::getProperty($object, $property); + } catch (ReflectionException $exception) { + return false; + } + $reflectionProperty->setAccessible(true); return $reflectionProperty->getValue($object) instanceof $this->propertyType; diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php index a094e729..742410cb 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php @@ -2,6 +2,12 @@ namespace DeepCopy\Reflection; +use DeepCopy\Exception\PropertyException; +use ReflectionClass; +use ReflectionException; +use ReflectionObject; +use ReflectionProperty; + class ReflectionHelper { /** @@ -12,10 +18,11 @@ class ReflectionHelper * @author muratyaman@gmail.com * @see http://php.net/manual/en/reflectionclass.getproperties.php * - * @param \ReflectionClass $ref - * @return \ReflectionProperty[] + * @param ReflectionClass $ref + * + * @return ReflectionProperty[] */ - public static function getProperties(\ReflectionClass $ref) + public static function getProperties(ReflectionClass $ref) { $props = $ref->getProperties(); $propsArr = array(); @@ -36,4 +43,36 @@ class ReflectionHelper return $propsArr; } + + /** + * Retrieves property by name from object and all its ancestors. + * + * @param object|string $object + * @param string $name + * + * @throws PropertyException + * @throws ReflectionException + * + * @return ReflectionProperty + */ + public static function getProperty($object, $name) + { + $reflection = is_object($object) ? new ReflectionObject($object) : new ReflectionClass($object); + + if ($reflection->hasProperty($name)) { + return $reflection->getProperty($name); + } + + if ($parentClass = $reflection->getParentClass()) { + return self::getProperty($parentClass->getName(), $name); + } + + throw new PropertyException( + sprintf( + 'The class "%s" doesn\'t have a property with the given name: "%s".', + is_object($object) ? get_class($object) : $object, + $name + ) + ); + } } diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php new file mode 100644 index 00000000..becd1cff --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php @@ -0,0 +1,33 @@ + $propertyValue) { + $copy->{$propertyName} = $propertyValue; + } + + return $copy; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php index 0e42b0fe..164f8b8e 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php @@ -2,6 +2,9 @@ namespace DeepCopy\TypeFilter; +/** + * @final + */ class ReplaceFilter implements TypeFilter { /** diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php index 408d18bb..a5fbd7a2 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php @@ -2,6 +2,9 @@ namespace DeepCopy\TypeFilter; +/** + * @final + */ class ShallowCopyFilter implements TypeFilter { /** diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php index 2bdc5373..c5644cff 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php @@ -2,36 +2,9 @@ namespace DeepCopy\TypeFilter\Spl; -use DeepCopy\DeepCopy; -use DeepCopy\TypeFilter\TypeFilter; - -class SplDoublyLinkedList implements TypeFilter +/** + * @deprecated Use {@see SplDoublyLinkedListFilter} instead. + */ +class SplDoublyLinkedList extends SplDoublyLinkedListFilter { - /** - * @var DeepCopy - */ - private $deepCopy; - - public function __construct(DeepCopy $deepCopy) - { - $this->deepCopy = $deepCopy; - } - - /** - * {@inheritdoc} - */ - public function apply($element) - { - $newElement = clone $element; - - if ($element instanceof \SplDoublyLinkedList) { - // Replace each element in the list with a deep copy of itself - for ($i = 1; $i <= $newElement->count(); $i++) { - $newElement->push($this->deepCopy->copy($newElement->shift())); - } - } - - return $newElement; - - } } diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php new file mode 100644 index 00000000..c33be458 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php @@ -0,0 +1,51 @@ +copier = $copier; + } + + /** + * {@inheritdoc} + */ + public function apply($element) + { + $newElement = clone $element; + + $copy = $this->createCopyClosure(); + + return $copy($newElement); + } + + private function createCopyClosure() + { + $copier = $this->copier; + + $copy = function (SplDoublyLinkedList $list) use ($copier) { + // Replace each element in the list with a deep copy of itself + for ($i = 1; $i <= $list->count(); $i++) { + $copy = $copier->recursiveCopy($list->shift()); + + $list->push($copy); + } + + return $list; + }; + + return Closure::bind($copy, null, DeepCopy::class); + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php index a37a8ba8..5785a7da 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php @@ -5,7 +5,8 @@ namespace DeepCopy\TypeFilter; interface TypeFilter { /** - * Apply the filter to the object. + * Applies the filter to the object. + * * @param mixed $element */ public function apply($element); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php index e640f31e..a563cb29 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php @@ -2,9 +2,6 @@ namespace DeepCopy\TypeMatcher; -/** - * TypeMatcher class - */ class TypeMatcher { /** @@ -21,7 +18,8 @@ class TypeMatcher } /** - * @param $element + * @param mixed $element + * * @return boolean */ public function matches($element) diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php new file mode 100644 index 00000000..272652ca --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php @@ -0,0 +1,16 @@ +copy($value); +} diff --git a/lib/composer/vendor/pear/console_getopt/.gitignore b/lib/composer/vendor/pear/console_getopt/.gitignore new file mode 100644 index 00000000..78358281 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/.gitignore @@ -0,0 +1,6 @@ +# composer related +composer.lock +composer.phar +vendor +README.html +dist/ diff --git a/lib/composer/vendor/pear/console_getopt/.travis.yml b/lib/composer/vendor/pear/console_getopt/.travis.yml new file mode 100644 index 00000000..2711415f --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/.travis.yml @@ -0,0 +1,9 @@ +language: php +php: + - 7 + - 5.6 + - 5.5 + - 5.4 +sudo: false +script: + - pear run-tests -r tests/ diff --git a/lib/composer/vendor/pear/console_getopt/Console/Getopt.php b/lib/composer/vendor/pear/console_getopt/Console/Getopt.php new file mode 100644 index 00000000..0da88585 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/Console/Getopt.php @@ -0,0 +1,360 @@ + + * @license http://www.php.net/license/3_0.txt PHP 3.0 + * @version CVS: $Id$ + * @link http://pear.php.net/package/Console_Getopt + */ + +require_once 'PEAR.php'; + +/** + * Command-line options parsing class. + * + * @category Console + * @package Console_Getopt + * @author Andrei Zmievski + * @license http://www.php.net/license/3_0.txt PHP 3.0 + * @link http://pear.php.net/package/Console_Getopt + */ +class Console_Getopt +{ + + /** + * Parses the command-line options. + * + * The first parameter to this function should be the list of command-line + * arguments without the leading reference to the running program. + * + * The second parameter is a string of allowed short options. Each of the + * option letters can be followed by a colon ':' to specify that the option + * requires an argument, or a double colon '::' to specify that the option + * takes an optional argument. + * + * The third argument is an optional array of allowed long options. The + * leading '--' should not be included in the option name. Options that + * require an argument should be followed by '=', and options that take an + * option argument should be followed by '=='. + * + * The return value is an array of two elements: the list of parsed + * options and the list of non-option command-line arguments. Each entry in + * the list of parsed options is a pair of elements - the first one + * specifies the option, and the second one specifies the option argument, + * if there was one. + * + * Long and short options can be mixed. + * + * Most of the semantics of this function are based on GNU getopt_long(). + * + * @param array $args an array of command-line arguments + * @param string $short_options specifies the list of allowed short options + * @param array $long_options specifies the list of allowed long options + * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option + * + * @return array two-element array containing the list of parsed options and + * the non-option arguments + */ + public static function getopt2($args, $short_options, $long_options = null, $skip_unknown = false) + { + return Console_Getopt::doGetopt(2, $args, $short_options, $long_options, $skip_unknown); + } + + /** + * This function expects $args to start with the script name (POSIX-style). + * Preserved for backwards compatibility. + * + * @param array $args an array of command-line arguments + * @param string $short_options specifies the list of allowed short options + * @param array $long_options specifies the list of allowed long options + * + * @see getopt2() + * @return array two-element array containing the list of parsed options and + * the non-option arguments + */ + public static function getopt($args, $short_options, $long_options = null, $skip_unknown = false) + { + return Console_Getopt::doGetopt(1, $args, $short_options, $long_options, $skip_unknown); + } + + /** + * The actual implementation of the argument parsing code. + * + * @param int $version Version to use + * @param array $args an array of command-line arguments + * @param string $short_options specifies the list of allowed short options + * @param array $long_options specifies the list of allowed long options + * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option + * + * @return array + */ + public static function doGetopt($version, $args, $short_options, $long_options = null, $skip_unknown = false) + { + // in case you pass directly readPHPArgv() as the first arg + if (PEAR::isError($args)) { + return $args; + } + + if (empty($args)) { + return array(array(), array()); + } + + $non_opts = $opts = array(); + + settype($args, 'array'); + + if ($long_options) { + sort($long_options); + } + + /* + * Preserve backwards compatibility with callers that relied on + * erroneous POSIX fix. + */ + if ($version < 2) { + if (isset($args[0]{0}) && $args[0]{0} != '-') { + array_shift($args); + } + } + + reset($args); + while (list($i, $arg) = each($args)) { + /* The special element '--' means explicit end of + options. Treat the rest of the arguments as non-options + and end the loop. */ + if ($arg == '--') { + $non_opts = array_merge($non_opts, array_slice($args, $i + 1)); + break; + } + + if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) { + $non_opts = array_merge($non_opts, array_slice($args, $i)); + break; + } elseif (strlen($arg) > 1 && $arg{1} == '-') { + $error = Console_Getopt::_parseLongOption(substr($arg, 2), + $long_options, + $opts, + $args, + $skip_unknown); + if (PEAR::isError($error)) { + return $error; + } + } elseif ($arg == '-') { + // - is stdin + $non_opts = array_merge($non_opts, array_slice($args, $i)); + break; + } else { + $error = Console_Getopt::_parseShortOption(substr($arg, 1), + $short_options, + $opts, + $args, + $skip_unknown); + if (PEAR::isError($error)) { + return $error; + } + } + } + + return array($opts, $non_opts); + } + + /** + * Parse short option + * + * @param string $arg Argument + * @param string[] $short_options Available short options + * @param string[][] &$opts + * @param string[] &$args + * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option + * + * @return void + */ + protected static function _parseShortOption($arg, $short_options, &$opts, &$args, $skip_unknown) + { + for ($i = 0; $i < strlen($arg); $i++) { + $opt = $arg{$i}; + $opt_arg = null; + + /* Try to find the short option in the specifier string. */ + if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':') { + if ($skip_unknown === true) { + break; + } + + $msg = "Console_Getopt: unrecognized option -- $opt"; + return PEAR::raiseError($msg); + } + + if (strlen($spec) > 1 && $spec{1} == ':') { + if (strlen($spec) > 2 && $spec{2} == ':') { + if ($i + 1 < strlen($arg)) { + /* Option takes an optional argument. Use the remainder of + the arg string if there is anything left. */ + $opts[] = array($opt, substr($arg, $i + 1)); + break; + } + } else { + /* Option requires an argument. Use the remainder of the arg + string if there is anything left. */ + if ($i + 1 < strlen($arg)) { + $opts[] = array($opt, substr($arg, $i + 1)); + break; + } else if (list(, $opt_arg) = each($args)) { + /* Else use the next argument. */; + if (Console_Getopt::_isShortOpt($opt_arg) + || Console_Getopt::_isLongOpt($opt_arg)) { + $msg = "option requires an argument --$opt"; + return PEAR::raiseError("Console_Getopt: " . $msg); + } + } else { + $msg = "option requires an argument --$opt"; + return PEAR::raiseError("Console_Getopt: " . $msg); + } + } + } + + $opts[] = array($opt, $opt_arg); + } + } + + /** + * Checks if an argument is a short option + * + * @param string $arg Argument to check + * + * @return bool + */ + protected static function _isShortOpt($arg) + { + return strlen($arg) == 2 && $arg[0] == '-' + && preg_match('/[a-zA-Z]/', $arg[1]); + } + + /** + * Checks if an argument is a long option + * + * @param string $arg Argument to check + * + * @return bool + */ + protected static function _isLongOpt($arg) + { + return strlen($arg) > 2 && $arg[0] == '-' && $arg[1] == '-' && + preg_match('/[a-zA-Z]+$/', substr($arg, 2)); + } + + /** + * Parse long option + * + * @param string $arg Argument + * @param string[] $long_options Available long options + * @param string[][] &$opts + * @param string[] &$args + * + * @return void|PEAR_Error + */ + protected static function _parseLongOption($arg, $long_options, &$opts, &$args, $skip_unknown) + { + @list($opt, $opt_arg) = explode('=', $arg, 2); + + $opt_len = strlen($opt); + + for ($i = 0; $i < count($long_options); $i++) { + $long_opt = $long_options[$i]; + $opt_start = substr($long_opt, 0, $opt_len); + + $long_opt_name = str_replace('=', '', $long_opt); + + /* Option doesn't match. Go on to the next one. */ + if ($long_opt_name != $opt) { + continue; + } + + $opt_rest = substr($long_opt, $opt_len); + + /* Check that the options uniquely matches one of the allowed + options. */ + if ($i + 1 < count($long_options)) { + $next_option_rest = substr($long_options[$i + 1], $opt_len); + } else { + $next_option_rest = ''; + } + + if ($opt_rest != '' && $opt{0} != '=' && + $i + 1 < count($long_options) && + $opt == substr($long_options[$i+1], 0, $opt_len) && + $next_option_rest != '' && + $next_option_rest{0} != '=') { + + $msg = "Console_Getopt: option --$opt is ambiguous"; + return PEAR::raiseError($msg); + } + + if (substr($long_opt, -1) == '=') { + if (substr($long_opt, -2) != '==') { + /* Long option requires an argument. + Take the next argument if one wasn't specified. */; + if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) { + $msg = "Console_Getopt: option requires an argument --$opt"; + return PEAR::raiseError($msg); + } + + if (Console_Getopt::_isShortOpt($opt_arg) + || Console_Getopt::_isLongOpt($opt_arg)) { + $msg = "Console_Getopt: option requires an argument --$opt"; + return PEAR::raiseError($msg); + } + } + } else if ($opt_arg) { + $msg = "Console_Getopt: option --$opt doesn't allow an argument"; + return PEAR::raiseError($msg); + } + + $opts[] = array('--' . $opt, $opt_arg); + return; + } + + if ($skip_unknown === true) { + return; + } + + return PEAR::raiseError("Console_Getopt: unrecognized option --$opt"); + } + + /** + * Safely read the $argv PHP array across different PHP configurations. + * Will take care on register_globals and register_argc_argv ini directives + * + * @return mixed the $argv PHP array or PEAR error if not registered + */ + public static function readPHPArgv() + { + global $argv; + if (!is_array($argv)) { + if (!@is_array($_SERVER['argv'])) { + if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) { + $msg = "Could not read cmd args (register_argc_argv=Off?)"; + return PEAR::raiseError("Console_Getopt: " . $msg); + } + return $GLOBALS['HTTP_SERVER_VARS']['argv']; + } + return $_SERVER['argv']; + } + return $argv; + } + +} \ No newline at end of file diff --git a/lib/composer/vendor/pear/console_getopt/LICENSE b/lib/composer/vendor/pear/console_getopt/LICENSE new file mode 100644 index 00000000..452b0883 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2001-2015, The PEAR developers +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/composer/vendor/pear/console_getopt/README.rst b/lib/composer/vendor/pear/console_getopt/README.rst new file mode 100644 index 00000000..64e5b41b --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/README.rst @@ -0,0 +1,26 @@ +******************************************* +Console_Getopt - Command-line option parser +******************************************* + +This is a PHP implementation of "getopt" supporting both short and long options. +It helps parsing command line options in your PHP script. + +Homepage: http://pear.php.net/package/Console_Getopt + +.. image:: https://travis-ci.org/pear/Console_Getopt.svg?branch=master + :target: https://travis-ci.org/pear/Console_Getopt + + +Alternatives +============ + +* Console_CommandLine__ (recommended) +* Console_GetoptPlus__ + +__ http://pear.php.net/package/Console_CommandLine +__ http://pear.php.net/package/Console_GetoptPlus + + +License +======= +BSD-2-Clause diff --git a/lib/composer/vendor/pear/console_getopt/composer.json b/lib/composer/vendor/pear/console_getopt/composer.json new file mode 100644 index 00000000..4dc7e7cc --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/composer.json @@ -0,0 +1,35 @@ +{ + "authors": [ + { + "email": "andrei@php.net", + "name": "Andrei Zmievski", + "role": "Lead" + }, + { + "email": "stig@php.net", + "name": "Stig Bakken", + "role": "Developer" + }, + { + "email": "cellog@php.net", + "name": "Greg Beaver", + "role": "Helper" + } + ], + "autoload": { + "psr-0": { + "Console": "./" + } + }, + "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "include-path": [ + "./" + ], + "license": "BSD-2-Clause", + "name": "pear/console_getopt", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt", + "source": "https://github.com/pear/Console_Getopt" + }, + "type": "library" +} diff --git a/lib/composer/vendor/pear/console_getopt/package.xml b/lib/composer/vendor/pear/console_getopt/package.xml new file mode 100644 index 00000000..7e8deb0e --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/package.xml @@ -0,0 +1,269 @@ + + + Console_Getopt + pear.php.net + Command-line option parser + This is a PHP implementation of "getopt" supporting both +short and long options. + + Andrei Zmievski + andrei + andrei@php.net + no + + + Stig Bakken + ssb + stig@php.net + no + + + Greg Beaver + cellog + cellog@php.net + yes + + + 2015-07-20 + + + 1.4.1 + 1.4.0 + + + stable + stable + + BSD-2-Clause + + +* Fix unit test on PHP 7 [cweiske] + + + + + + + + + + + + + + + + + + PEAR + pear.php.net + 1.4.0 + 1.999.999 + + + + + + 5.4.0 + + + 1.8.0 + + + + + + + + + + 2015-07-20 + + 1.4.1 + 1.4.0 + + + stable + stable + + BSD-2-Clause + + * Fix unit test on PHP 7 [cweiske] + + + + + 2015-02-22 + + 1.4.0 + 1.4.0 + + + stable + stable + + BSD-2-Clause + + * Change license to BSD-2-Clause + * Set minimum PHP version to 5.4.0 + * Mark static methods with "static" keyword + + + + + 2011-03-07 + + 1.3.1 + 1.3.0 + + + stable + stable + + PHP License + + * Change the minimum PEAR installer dep to be lower + + + + + 2010-12-11 + + + 1.3.0 + 1.3.0 + + + stable + stable + + PHP License + + * Implement Request #13140: [PATCH] to skip unknown parameters. [patch by rquadling, improved on by dufuz] + + + + + 2007-06-12 + + 1.2.3 + 1.2.1 + + + stable + stable + + PHP License + +* fix Bug #11068: No way to read plain "-" option [cardoe] + + + + + 1.2.2 + 1.2.1 + + + stable + stable + + 2007-02-17 + PHP License + +* fix Bug #4475: An ambiguous error occurred when specifying similar longoption name. +* fix Bug #10055: Not failing properly on short options missing required values + + + + + 1.2.1 + 1.2.1 + + + stable + stable + + 2006-12-08 + PHP License + +Fixed bugs #4448 (Long parameter values truncated with longoption parameter) and #7444 (Trailing spaces after php closing tag) + + + + + 1.2 + 1.2 + + + stable + stable + + 2003-12-11 + PHP License + +Fix to preserve BC with 1.0 and allow correct behaviour for new users + + + + + 1.0 + 1.0 + + + stable + stable + + 2002-09-13 + PHP License + +Stable release + + + + + 0.11 + 0.11 + + + beta + beta + + 2002-05-26 + PHP License + +POSIX getopt compatibility fix: treat first element of args + array as command name + + + + + 0.10 + 0.10 + + + beta + beta + + 2002-05-12 + PHP License + +Packaging fix + + + + + 0.9 + 0.9 + + + beta + beta + + 2002-05-12 + PHP License + +Initial release + + + + diff --git a/lib/composer/vendor/pear/console_getopt/tests/001-getopt.phpt b/lib/composer/vendor/pear/console_getopt/tests/001-getopt.phpt new file mode 100644 index 00000000..75ae8481 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/tests/001-getopt.phpt @@ -0,0 +1,63 @@ +--TEST-- +Console_Getopt +--FILE-- + $d) { + if ($i++ > 0) { + print ", "; + } + print $d[0] . '=' . $d[1]; + } + print "\n"; + print "params: " . implode(", ", $non_opts) . "\n"; + print "\n"; +} + +test("-abc", "abc"); +test("-abc foo", "abc"); +test("-abc foo", "abc:"); +test("-abc foo bar gazonk", "abc"); +test("-abc foo bar gazonk", "abc:"); +test("-a -b -c", "abc"); +test("-a -b -c", "abc:"); +test("-abc", "ab:c"); +test("-abc foo -bar gazonk", "abc"); +?> +--EXPECT-- +options: a=, b=, c= +params: + +options: a=, b=, c= +params: foo + +options: a=, b=, c=foo +params: + +options: a=, b=, c= +params: foo, bar, gazonk + +options: a=, b=, c=foo +params: bar, gazonk + +options: a=, b=, c= +params: + +Console_Getopt: option requires an argument --c + +options: a=, b=c +params: + +options: a=, b=, c= +params: foo, -bar, gazonk diff --git a/lib/composer/vendor/pear/console_getopt/tests/bug10557.phpt b/lib/composer/vendor/pear/console_getopt/tests/bug10557.phpt new file mode 100644 index 00000000..08b72ac8 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/tests/bug10557.phpt @@ -0,0 +1,22 @@ +--TEST-- +Console_Getopt [bug 10557] +--SKIPIF-- +--FILE-- +getMessage()."\n"; + echo 'FATAL'; + exit; +} + +print_r($ret); +?> +--EXPECT-- +Console_Getopt: option requires an argument --to +FATAL \ No newline at end of file diff --git a/lib/composer/vendor/pear/console_getopt/tests/bug11068.phpt b/lib/composer/vendor/pear/console_getopt/tests/bug11068.phpt new file mode 100644 index 00000000..8bbe4bfc --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/tests/bug11068.phpt @@ -0,0 +1,44 @@ +--TEST-- +Console_Getopt [bug 11068] +--SKIPIF-- +--FILE-- +getMessage()."\n"; + echo 'FATAL'; + exit; +} + +print_r($ret); +?> +--EXPECT-- +Array +( + [0] => Array + ( + [0] => Array + ( + [0] => f + [1] => jjohnston@mail.com + ) + + [1] => Array + ( + [0] => --to + [1] => hi + ) + + ) + + [1] => Array + ( + [0] => - + ) + +) \ No newline at end of file diff --git a/lib/composer/vendor/pear/console_getopt/tests/bug13140.phpt b/lib/composer/vendor/pear/console_getopt/tests/bug13140.phpt new file mode 100644 index 00000000..4ce13bbf --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/tests/bug13140.phpt @@ -0,0 +1,75 @@ +--TEST-- +Console_Getopt [bug 13140] +--SKIPIF-- +--FILE-- +getopt2($cg->readPHPArgv(), 't', array('test'), true)); +print_r($cg->getopt2($cg->readPHPArgv(), 'bar', array('foo'), true)); +?> +--EXPECT-- +Array +( + [0] => Array + ( + [0] => Array + ( + [0] => --test + [1] => + ) + + ) + + [1] => Array + ( + [0] => thisshouldbehere + ) + +) +Array +( + [0] => Array + ( + [0] => Array + ( + [0] => --foo + [1] => + ) + + [1] => Array + ( + [0] => b + [1] => + ) + + [2] => Array + ( + [0] => a + [1] => + ) + + [3] => Array + ( + [0] => r + [1] => + ) + + [4] => Array + ( + [0] => r + [1] => + ) + + ) + + [1] => Array + ( + [0] => thisshouldbehere + ) + +) diff --git a/lib/composer/vendor/pear/mail/.gitignore b/lib/composer/vendor/pear/mail/.gitignore new file mode 100644 index 00000000..869f4985 --- /dev/null +++ b/lib/composer/vendor/pear/mail/.gitignore @@ -0,0 +1,4 @@ +# composer related +composer.lock +composer.phar +vendor diff --git a/lib/composer/vendor/pear/mail/.travis.yml b/lib/composer/vendor/pear/mail/.travis.yml new file mode 100644 index 00000000..c1502729 --- /dev/null +++ b/lib/composer/vendor/pear/mail/.travis.yml @@ -0,0 +1,19 @@ +language: php +sudo: false +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - nightly +install: + - pear list + - pear channel-update pear.php.net + - pear upgrade --force pear/pear + - pear list + - pear upgrade --force xml_util + - pear install --force --alldeps package.xml + - pear list +script: + - pear run-tests -d tests/ diff --git a/lib/composer/vendor/pear/mail/LICENSE b/lib/composer/vendor/pear/mail/LICENSE new file mode 100644 index 00000000..9aee685e --- /dev/null +++ b/lib/composer/vendor/pear/mail/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 1997-2017, Chuck Hagenbuch +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/composer/vendor/pear/mail/Mail.php b/lib/composer/vendor/pear/mail/Mail.php new file mode 100644 index 00000000..b04bc01c --- /dev/null +++ b/lib/composer/vendor/pear/mail/Mail.php @@ -0,0 +1,267 @@ + + * @copyright 1997-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ + * @link http://pear.php.net/package/Mail/ + */ + +require_once 'PEAR.php'; + +/** + * PEAR's Mail:: interface. Defines the interface for implementing + * mailers under the PEAR hierarchy, and provides supporting functions + * useful in multiple mailer backends. + * + * @version $Revision$ + * @package Mail + */ +class Mail +{ + /** + * Line terminator used for separating header lines. + * @var string + */ + public $sep = "\r\n"; + + /** + * Provides an interface for generating Mail:: objects of various + * types + * + * @param string $driver The kind of Mail:: object to instantiate. + * @param array $params The parameters to pass to the Mail:: object. + * + * @return object Mail a instance of the driver class or if fails a PEAR Error + */ + public static function factory($driver, $params = array()) + { + $driver = strtolower($driver); + @include_once 'Mail/' . $driver . '.php'; + $class = 'Mail_' . $driver; + if (class_exists($class)) { + $mailer = new $class($params); + return $mailer; + } else { + return PEAR::raiseError('Unable to find class for driver ' . $driver); + } + } + + /** + * Implements Mail::send() function using php's built-in mail() + * command. + * + * @param mixed $recipients Either a comma-seperated list of recipients + * (RFC822 compliant), or an array of recipients, + * each RFC822 valid. This may contain recipients not + * specified in the headers, for Bcc:, resending + * messages, etc. + * + * @param array $headers The array of headers to send with the mail, in an + * associative array, where the array key is the + * header name (ie, 'Subject'), and the array value + * is the header value (ie, 'test'). The header + * produced from those values would be 'Subject: + * test'. + * + * @param string $body The full text of the message body, including any + * Mime parts, etc. + * + * @return mixed Returns true on success, or a PEAR_Error + * containing a descriptive error message on + * failure. + * + * @deprecated use Mail_mail::send instead + */ + public function send($recipients, $headers, $body) + { + if (!is_array($headers)) { + return PEAR::raiseError('$headers must be an array'); + } + + $result = $this->_sanitizeHeaders($headers); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + + // if we're passed an array of recipients, implode it. + if (is_array($recipients)) { + $recipients = implode(', ', $recipients); + } + + // get the Subject out of the headers array so that we can + // pass it as a seperate argument to mail(). + $subject = ''; + if (isset($headers['Subject'])) { + $subject = $headers['Subject']; + unset($headers['Subject']); + } + + // flatten the headers out. + list(, $text_headers) = Mail::prepareHeaders($headers); + + return mail($recipients, $subject, $body, $text_headers); + } + + /** + * Sanitize an array of mail headers by removing any additional header + * strings present in a legitimate header's value. The goal of this + * filter is to prevent mail injection attacks. + * + * @param array $headers The associative array of headers to sanitize. + */ + protected function _sanitizeHeaders(&$headers) + { + foreach ($headers as $key => $value) { + $headers[$key] = + preg_replace('=((||0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i', + null, $value); + } + } + + /** + * Take an array of mail headers and return a string containing + * text usable in sending a message. + * + * @param array $headers The array of headers to prepare, in an associative + * array, where the array key is the header name (ie, + * 'Subject'), and the array value is the header + * value (ie, 'test'). The header produced from those + * values would be 'Subject: test'. + * + * @return mixed Returns false if it encounters a bad address, + * otherwise returns an array containing two + * elements: Any From: address found in the headers, + * and the plain text version of the headers. + */ + protected function prepareHeaders($headers) + { + $lines = array(); + $from = null; + + foreach ($headers as $key => $value) { + if (strcasecmp($key, 'From') === 0) { + include_once 'Mail/RFC822.php'; + $parser = new Mail_RFC822(); + $addresses = $parser->parseAddressList($value, 'localhost', false); + if (is_a($addresses, 'PEAR_Error')) { + return $addresses; + } + + $from = $addresses[0]->mailbox . '@' . $addresses[0]->host; + + // Reject envelope From: addresses with spaces. + if (strstr($from, ' ')) { + return false; + } + + $lines[] = $key . ': ' . $value; + } elseif (strcasecmp($key, 'Received') === 0) { + $received = array(); + if (is_array($value)) { + foreach ($value as $line) { + $received[] = $key . ': ' . $line; + } + } + else { + $received[] = $key . ': ' . $value; + } + // Put Received: headers at the top. Spam detectors often + // flag messages with Received: headers after the Subject: + // as spam. + $lines = array_merge($received, $lines); + } else { + // If $value is an array (i.e., a list of addresses), convert + // it to a comma-delimited string of its elements (addresses). + if (is_array($value)) { + $value = implode(', ', $value); + } + $lines[] = $key . ': ' . $value; + } + } + + return array($from, join($this->sep, $lines)); + } + + /** + * Take a set of recipients and parse them, returning an array of + * bare addresses (forward paths) that can be passed to sendmail + * or an smtp server with the rcpt to: command. + * + * @param mixed Either a comma-seperated list of recipients + * (RFC822 compliant), or an array of recipients, + * each RFC822 valid. + * + * @return mixed An array of forward paths (bare addresses) or a PEAR_Error + * object if the address list could not be parsed. + */ + protected function parseRecipients($recipients) + { + include_once 'Mail/RFC822.php'; + + // if we're passed an array, assume addresses are valid and + // implode them before parsing. + if (is_array($recipients)) { + $recipients = implode(', ', $recipients); + } + + // Parse recipients, leaving out all personal info. This is + // for smtp recipients, etc. All relevant personal information + // should already be in the headers. + $Mail_RFC822 = new Mail_RFC822(); + $addresses = $Mail_RFC822->parseAddressList($recipients, 'localhost', false); + + // If parseAddressList() returned a PEAR_Error object, just return it. + if (is_a($addresses, 'PEAR_Error')) { + return $addresses; + } + + $recipients = array(); + if (is_array($addresses)) { + foreach ($addresses as $ob) { + $recipients[] = $ob->mailbox . '@' . $ob->host; + } + } + + return $recipients; + } + +} diff --git a/lib/Mail/RFC822.php b/lib/composer/vendor/pear/mail/Mail/RFC822.php similarity index 91% rename from lib/Mail/RFC822.php rename to lib/composer/vendor/pear/mail/Mail/RFC822.php index 58d36465..e0748f58 100644 --- a/lib/Mail/RFC822.php +++ b/lib/composer/vendor/pear/mail/Mail/RFC822.php @@ -2,31 +2,33 @@ /** * RFC 822 Email address list validation Utility * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: * - * Copyright (c) 2001-2010, Richard Heyes + * Copyright (c) 2001-2017, Chuck Hagenbuch & Richard Heyes * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - * o Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * o Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * o The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY @@ -38,9 +40,9 @@ * @package Mail * @author Richard Heyes * @author Chuck Hagenbuch * @author Chuck Hagenbuch - * @version $Revision: 294749 $ + * @version $Revision$ * @license BSD * @package Mail */ @@ -141,7 +143,6 @@ class Mail_RFC822 { * Sets up the object. The address must either be set here or when * calling parseAddressList(). One or the other. * - * @access public * @param string $address The address(es) to validate. * @param string $default_domain Default domain/host etc. If not supplied, will be set to localhost. * @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing. @@ -149,7 +150,7 @@ class Mail_RFC822 { * * @return object Mail_RFC822 A new Mail_RFC822 object. */ - function Mail_RFC822($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) + public function __construct($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) { if (isset($address)) $this->address = $address; if (isset($default_domain)) $this->default_domain = $default_domain; @@ -162,7 +163,6 @@ class Mail_RFC822 { * Starts the whole process. The address must either be set here * or when creating the object. One or the other. * - * @access public * @param string $address The address(es) to validate. * @param string $default_domain Default domain/host etc. * @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing. @@ -170,7 +170,7 @@ class Mail_RFC822 { * * @return array A structured array of addresses. */ - function parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) + public function parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) { if (!isset($this) || !isset($this->mailRFC822)) { $obj = new Mail_RFC822($address, $default_domain, $nest_groups, $validate, $limit); @@ -222,11 +222,10 @@ class Mail_RFC822 { /** * Splits an address into separate addresses. * - * @access private * @param string $address The addresses to split. * @return boolean Success or failure. */ - function _splitAddresses($address) + protected function _splitAddresses($address) { if (!empty($this->limit) && count($this->addresses) == $this->limit) { return ''; @@ -298,11 +297,10 @@ class Mail_RFC822 { /** * Checks for a group at the start of the string. * - * @access private * @param string $address The address to check. * @return boolean Whether or not there is a group at the start of the string. */ - function _isGroup($address) + protected function _isGroup($address) { // First comma not in quotes, angles or escaped: $parts = explode(',', $address); @@ -322,12 +320,11 @@ class Mail_RFC822 { /** * A common function that will check an exploded string. * - * @access private * @param array $parts The exloded string. * @param string $char The char that was exploded on. * @return mixed False if the string contains unclosed quotes/brackets, or the string on success. */ - function _splitCheck($parts, $char) + protected function _splitCheck($parts, $char) { $string = $parts[0]; @@ -355,12 +352,11 @@ class Mail_RFC822 { /** * Checks if a string has unclosed quotes or not. * - * @access private * @param string $string The string to check. * @return boolean True if there are unclosed quotes inside the string, * false otherwise. */ - function _hasUnclosedQuotes($string) + protected function _hasUnclosedQuotes($string) { $string = trim($string); $iMax = strlen($string); @@ -392,12 +388,11 @@ class Mail_RFC822 { * Checks if a string has an unclosed brackets or not. IMPORTANT: * This function handles both angle brackets and square brackets; * - * @access private * @param string $string The string to check. * @param string $chars The characters to check for. * @return boolean True if there are unclosed brackets inside the string, false otherwise. */ - function _hasUnclosedBrackets($string, $chars) + protected function _hasUnclosedBrackets($string, $chars) { $num_angle_start = substr_count($string, $chars[0]); $num_angle_end = substr_count($string, $chars[1]); @@ -416,13 +411,12 @@ class Mail_RFC822 { /** * Sub function that is used only by hasUnclosedBrackets(). * - * @access private * @param string $string The string to check. * @param integer &$num The number of occurences. * @param string $char The character to count. * @return integer The number of occurences of $char in $string, adjusted for backslashes. */ - function _hasUnclosedBracketsSub($string, &$num, $char) + protected function _hasUnclosedBracketsSub($string, &$num, $char) { $parts = explode($char, $string); for ($i = 0; $i < count($parts); $i++){ @@ -438,11 +432,10 @@ class Mail_RFC822 { /** * Function to begin checking the address. * - * @access private * @param string $address The address to validate. * @return mixed False on failure, or a structured array of address information on success. */ - function _validateAddress($address) + protected function _validateAddress($address) { $is_group = false; $addresses = array(); @@ -483,14 +476,6 @@ class Mail_RFC822 { $addresses[] = $address['address']; } - // Check that $addresses is set, if address like this: - // Groupname:; - // Then errors were appearing. - if (!count($addresses)){ - $this->error = 'Empty group.'; - return false; - } - // Trim the whitespace from all of the address strings. array_map('trim', $addresses); @@ -531,11 +516,10 @@ class Mail_RFC822 { /** * Function to validate a phrase. * - * @access private * @param string $phrase The phrase to check. * @return boolean Success or failure. */ - function _validatePhrase($phrase) + protected function _validatePhrase($phrase) { // Splits on one or more Tab or space. $parts = preg_split('/[ \\x09]+/', $phrase, -1, PREG_SPLIT_NO_EMPTY); @@ -572,11 +556,10 @@ class Mail_RFC822 { * can split a list of addresses up before encoding personal names * (umlauts, etc.), for example. * - * @access private * @param string $atom The string to check. * @return boolean Success or failure. */ - function _validateAtom($atom) + protected function _validateAtom($atom) { if (!$this->validate) { // Validation has been turned off; assume the atom is okay. @@ -605,11 +588,10 @@ class Mail_RFC822 { * Function to validate quoted string, which is: * quoted-string = <"> *(qtext/quoted-pair) <"> * - * @access private * @param string $qstring The string to check * @return boolean Success or failure. */ - function _validateQuotedString($qstring) + protected function _validateQuotedString($qstring) { // Leading and trailing " $qstring = substr($qstring, 1, -1); @@ -623,11 +605,10 @@ class Mail_RFC822 { * mailbox = addr-spec ; simple address * / phrase route-addr ; name and route-addr * - * @access public * @param string &$mailbox The string to check. * @return boolean Success or failure. */ - function validateMailbox(&$mailbox) + public function validateMailbox(&$mailbox) { // A couple of defaults. $phrase = ''; @@ -712,11 +693,10 @@ class Mail_RFC822 { * Angle brackets have already been removed at the point of * getting to this function. * - * @access private * @param string $route_addr The string to check. * @return mixed False on failure, or an array containing validated address/route information on success. */ - function _validateRouteAddr($route_addr) + protected function _validateRouteAddr($route_addr) { // Check for colon. if (strpos($route_addr, ':') !== false) { @@ -762,11 +742,10 @@ class Mail_RFC822 { * Function to validate a route, which is: * route = 1#("@" domain) ":" * - * @access private * @param string $route The string to check. * @return mixed False on failure, or the validated $route on success. */ - function _validateRoute($route) + protected function _validateRoute($route) { // Split on comma. $domains = explode(',', trim($route)); @@ -785,11 +764,10 @@ class Mail_RFC822 { * * domain = sub-domain *("." sub-domain) * - * @access private * @param string $domain The string to check. * @return mixed False on failure, or the validated domain on success. */ - function _validateDomain($domain) + protected function _validateDomain($domain) { // Note the different use of $subdomains and $sub_domains $subdomains = explode('.', $domain); @@ -813,11 +791,10 @@ class Mail_RFC822 { * Function to validate a subdomain: * subdomain = domain-ref / domain-literal * - * @access private * @param string $subdomain The string to check. * @return boolean Success or failure. */ - function _validateSubdomain($subdomain) + protected function _validateSubdomain($subdomain) { if (preg_match('|^\[(.*)]$|', $subdomain, $arr)){ if (!$this->_validateDliteral($arr[1])) return false; @@ -833,13 +810,12 @@ class Mail_RFC822 { * Function to validate a domain literal: * domain-literal = "[" *(dtext / quoted-pair) "]" * - * @access private * @param string $dliteral The string to check. * @return boolean Success or failure. */ - function _validateDliteral($dliteral) + protected function _validateDliteral($dliteral) { - return !preg_match('/(.)[][\x0D\\\\]/', $dliteral, $matches) && $matches[1] != '\\'; + return !preg_match('/(.)[][\x0D\\\\]/', $dliteral, $matches) && ((! isset($matches[1])) || $matches[1] != '\\'); } /** @@ -847,11 +823,10 @@ class Mail_RFC822 { * * addr-spec = local-part "@" domain * - * @access private * @param string $addr_spec The string to check. * @return mixed False on failure, or the validated addr-spec on success. */ - function _validateAddrSpec($addr_spec) + protected function _validateAddrSpec($addr_spec) { $addr_spec = trim($addr_spec); @@ -878,17 +853,16 @@ class Mail_RFC822 { * Function to validate the local part of an address: * local-part = word *("." word) * - * @access private * @param string $local_part * @return mixed False on failure, or the validated local part on success. */ - function _validateLocalPart($local_part) + protected function _validateLocalPart($local_part) { $parts = explode('.', $local_part); $words = array(); // Split the local_part into words. - while (count($parts) > 0){ + while (count($parts) > 0) { $words[] = $this->_splitCheck($parts, '.'); for ($i = 0; $i < $this->index + 1; $i++) { array_shift($parts); @@ -897,6 +871,10 @@ class Mail_RFC822 { // Validate each word. foreach ($words as $word) { + // word cannot be empty (#17317) + if ($word === '') { + return false; + } // If this word contains an unquoted space, it is invalid. (6.2.4) if (strpos($word, ' ') && $word[0] !== '"') { @@ -920,7 +898,7 @@ class Mail_RFC822 { * @param string $data Addresses to count * @return int Approximate count */ - function approximateCount($data) + public function approximateCount($data) { return count(preg_split('/(? - * @copyright 2010 Chuck Hagenbuch - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: mail.php 294747 2010-02-08 08:18:33Z clockwerx $ + * @copyright 2010-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ * @link http://pear.php.net/package/Mail/ */ /** * internal PHP-mail() implementation of the PEAR Mail:: interface. * @package Mail - * @version $Revision: 294747 $ + * @version $Revision$ */ class Mail_mail extends Mail { @@ -64,7 +66,7 @@ class Mail_mail extends Mail { * * @param array $params Extra arguments for the mail() function. */ - function Mail_mail($params = null) + public function __construct($params = null) { // The other mail implementations accept parameters as arrays. // In the interest of being consistent, explode an array into @@ -109,10 +111,8 @@ class Mail_mail extends Mail { * @return mixed Returns true on success, or a PEAR_Error * containing a descriptive error message on * failure. - * - * @access public */ - function send($recipients, $headers, $body) + public function send($recipients, $headers, $body) { if (!is_array($headers)) { return PEAR::raiseError('$headers must be an array'); diff --git a/lib/Mail/mock.php b/lib/composer/vendor/pear/mail/Mail/mock.php similarity index 77% rename from lib/Mail/mock.php rename to lib/composer/vendor/pear/mail/Mail/mock.php index 61570ba4..24d46a85 100644 --- a/lib/Mail/mock.php +++ b/lib/composer/vendor/pear/mail/Mail/mock.php @@ -2,31 +2,33 @@ /** * Mock implementation * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: * - * Copyright (c) 2010 Chuck Hagenbuch + * Copyright (c) 2010-2017, Chuck Hagenbuch * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - * o Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * o Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * o The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY @@ -37,9 +39,9 @@ * @category Mail * @package Mail * @author Chuck Hagenbuch - * @copyright 2010 Chuck Hagenbuch - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: mock.php 294747 2010-02-08 08:18:33Z clockwerx $ + * @copyright 2010-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ * @link http://pear.php.net/package/Mail/ */ @@ -47,7 +49,7 @@ * Mock implementation of the PEAR Mail:: interface for testing. * @access public * @package Mail - * @version $Revision: 294747 $ + * @version $Revision$ */ class Mail_mock extends Mail { @@ -55,23 +57,22 @@ class Mail_mock extends Mail { * Array of messages that have been sent with the mock. * * @var array - * @access public */ - var $sentMessages = array(); + public $sentMessages = array(); /** * Callback before sending mail. * * @var callback */ - var $_preSendCallback; + protected $_preSendCallback; /** * Callback after sending mai. * * @var callback */ - var $_postSendCallback; + protected $_postSendCallback; /** * Constructor. @@ -82,9 +83,8 @@ class Mail_mock extends Mail { * postSendCallback Called after an email would have been sent. * * @param array Hash containing any parameters. - * @access public */ - function Mail_mock($params) + public function __construct($params) { if (isset($params['preSendCallback']) && is_callable($params['preSendCallback'])) { @@ -120,9 +120,8 @@ class Mail_mock extends Mail { * @return mixed Returns true on success, or a PEAR_Error * containing a descriptive error message on * failure. - * @access public */ - function send($recipients, $headers, $body) + public function send($recipients, $headers, $body) { if ($this->_preSendCallback) { call_user_func_array($this->_preSendCallback, diff --git a/lib/Mail/null.php b/lib/composer/vendor/pear/mail/Mail/null.php similarity index 71% rename from lib/Mail/null.php rename to lib/composer/vendor/pear/mail/Mail/null.php index f8d58272..5e3ecb6f 100644 --- a/lib/Mail/null.php +++ b/lib/composer/vendor/pear/mail/Mail/null.php @@ -2,31 +2,33 @@ /** * Null implementation of the PEAR Mail interface * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: * - * Copyright (c) 2010 Phil Kernick + * Copyright (c) 2010-2017, Phil Kernick * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - * o Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * o Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * o The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY @@ -37,9 +39,9 @@ * @category Mail * @package Mail * @author Phil Kernick - * @copyright 2010 Phil Kernick - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: null.php 294747 2010-02-08 08:18:33Z clockwerx $ + * @copyright 2010-2017 Phil Kernick + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ * @link http://pear.php.net/package/Mail/ */ @@ -47,7 +49,7 @@ * Null implementation of the PEAR Mail:: interface. * @access public * @package Mail - * @version $Revision: 294747 $ + * @version $Revision$ */ class Mail_null extends Mail { @@ -74,9 +76,8 @@ class Mail_null extends Mail { * @return mixed Returns true on success, or a PEAR_Error * containing a descriptive error message on * failure. - * @access public */ - function send($recipients, $headers, $body) + public function send($recipients, $headers, $body) { return true; } diff --git a/lib/Mail/sendmail.php b/lib/composer/vendor/pear/mail/Mail/sendmail.php similarity index 71% rename from lib/Mail/sendmail.php rename to lib/composer/vendor/pear/mail/Mail/sendmail.php index b056575e..7e8f8048 100644 --- a/lib/Mail/sendmail.php +++ b/lib/composer/vendor/pear/mail/Mail/sendmail.php @@ -1,26 +1,56 @@ | -// +----------------------------------------------------------------------+ +/** + * Sendmail implementation of the PEAR Mail interface. + * + * PHP version 5 + * + * LICENSE: + * + * Copyright (c) 2010-2017, Chuck Hagenbuch & Jon Parise + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @category Mail + * @package Mail + * @author Jon Parise + * @author Chuck Hagenbuch + * @copyright 2010-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ + * @link http://pear.php.net/package/Mail/ + */ /** * Sendmail implementation of the PEAR Mail:: interface. * @access public * @package Mail - * @version $Revision: 294744 $ + * @version $Revision$ */ class Mail_sendmail extends Mail { @@ -54,9 +84,8 @@ class Mail_sendmail extends Mail { * * @param array $params Hash containing any parameters different from the * defaults. - * @access public */ - function Mail_sendmail($params) + public function __construct($params) { if (isset($params['sendmail_path'])) { $this->sendmail_path = $params['sendmail_path']; @@ -100,9 +129,8 @@ class Mail_sendmail extends Mail { * @return mixed Returns true on success, or a PEAR_Error * containing a descriptive error message on * failure. - * @access public */ - function send($recipients, $headers, $body) + public function send($recipients, $headers, $body) { if (!is_array($headers)) { return PEAR::raiseError('$headers must be an array'); diff --git a/lib/Mail/smtp.php b/lib/composer/vendor/pear/mail/Mail/smtp.php similarity index 84% rename from lib/Mail/smtp.php rename to lib/composer/vendor/pear/mail/Mail/smtp.php index 52ea6020..5e698fee 100644 --- a/lib/Mail/smtp.php +++ b/lib/composer/vendor/pear/mail/Mail/smtp.php @@ -2,31 +2,33 @@ /** * SMTP implementation of the PEAR Mail interface. Requires the Net_SMTP class. * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: * - * Copyright (c) 2010, Chuck Hagenbuch + * Copyright (c) 2010-2017, Chuck Hagenbuch & Jon Parise * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - * o Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * o Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * o The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY @@ -38,9 +40,9 @@ * @package HTTP_Request * @author Jon Parise * @author Chuck Hagenbuch - * @copyright 2010 Chuck Hagenbuch - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: smtp.php 294747 2010-02-08 08:18:33Z clockwerx $ + * @copyright 2010-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ * @link http://pear.php.net/package/Mail/ */ @@ -69,7 +71,7 @@ define('PEAR_MAIL_SMTP_ERROR_DATA', 10006); * SMTP implementation of the PEAR Mail interface. Requires the Net_SMTP class. * @access public * @package Mail - * @version $Revision: 294747 $ + * @version $Revision$ */ class Mail_smtp extends Mail { @@ -84,18 +86,21 @@ class Mail_smtp extends Mail { /** * The list of service extension parameters to pass to the Net_SMTP * mailFrom() command. + * * @var array */ var $_extparams = array(); /** * The SMTP host to connect to. + * * @var string */ var $host = 'localhost'; /** * The port the SMTP server is on. + * * @var integer */ var $port = 25; @@ -115,12 +120,14 @@ class Mail_smtp extends Mail { /** * The username to use if the SMTP server requires authentication. + * * @var string */ var $username = ''; /** * The password to use if the SMTP server requires authentication. + * * @var string */ var $password = ''; @@ -159,10 +166,18 @@ class Mail_smtp extends Mail { * Use SMTP command pipelining (specified in RFC 2920) if the SMTP server * supports it. This speeds up delivery over high-latency connections. By * default, use the default value supplied by Net_SMTP. - * @var bool + * + * @var boolean */ var $pipelining; + /** + * The list of socket options + * + * @var array + */ + var $socket_options = array(); + /** * Constructor. * @@ -186,9 +201,8 @@ class Mail_smtp extends Mail { * * @param array Hash containing any parameters different from the * defaults. - * @access public */ - function Mail_smtp($params) + public function __construct($params) { if (isset($params['host'])) $this->host = $params['host']; if (isset($params['port'])) $this->port = $params['port']; @@ -200,20 +214,18 @@ class Mail_smtp extends Mail { if (isset($params['debug'])) $this->debug = (bool)$params['debug']; if (isset($params['persist'])) $this->persist = (bool)$params['persist']; if (isset($params['pipelining'])) $this->pipelining = (bool)$params['pipelining']; - + if (isset($params['socket_options'])) $this->socket_options = $params['socket_options']; // Deprecated options if (isset($params['verp'])) { $this->addServiceExtensionParameter('XVERP', is_bool($params['verp']) ? null : $params['verp']); } - - register_shutdown_function(array(&$this, '_Mail_smtp')); } /** * Destructor implementation to ensure that we disconnect from any * potentially-alive persistent SMTP connections. */ - function _Mail_smtp() + public function __destruct() { $this->disconnect(); } @@ -240,12 +252,23 @@ class Mail_smtp extends Mail { * @return mixed Returns true on success, or a PEAR_Error * containing a descriptive error message on * failure. - * @access public */ - function send($recipients, $headers, $body) + public function send($recipients, $headers, $body) + { + $result = $this->send_or_fail($recipients, $headers, $body); + + /* If persistent connections are disabled, destroy our SMTP object. */ + if ($this->persist === false) { + $this->disconnect(); + } + + return $result; + } + + protected function send_or_fail($recipients, $headers, $body) { /* If we don't already have an SMTP object, create one. */ - $result = &$this->getSMTPObject(); + $result = $this->getSMTPObject(); if (PEAR::isError($result)) { return $result; } @@ -304,16 +327,16 @@ class Mail_smtp extends Mail { } /* Send the message's headers and the body as SMTP data. */ - $res = $this->_smtp->data($textHeaders . "\r\n\r\n" . $body); - list(,$args) = $this->_smtp->getResponse(); + $res = $this->_smtp->data($body, $textHeaders); + list(,$args) = $this->_smtp->getResponse(); - if (preg_match("/Ok: queued as (.*)/", $args, $queued)) { - $this->queued_as = $queued[1]; - } + if (preg_match("/ queued as (.*)/", $args, $queued)) { + $this->queued_as = $queued[1]; + } - /* we need the greeting; from it we can extract the authorative name of the mail server we've really connected to. - * ideal if we're connecting to a round-robin of relay servers and need to track which exact one took the email */ - $this->greeting = $this->_smtp->getGreeting(); + /* we need the greeting; from it we can extract the authorative name of the mail server we've really connected to. + * ideal if we're connecting to a round-robin of relay servers and need to track which exact one took the email */ + $this->greeting = $this->_smtp->getGreeting(); if (is_a($res, 'PEAR_Error')) { $error = $this->_error('Failed to send data', $res); @@ -321,11 +344,6 @@ class Mail_smtp extends Mail { return PEAR::raiseError($error, PEAR_MAIL_SMTP_ERROR_DATA); } - /* If persistent connections are disabled, destroy our SMTP object. */ - if ($this->persist === false) { - $this->disconnect(); - } - return true; } @@ -337,18 +355,20 @@ class Mail_smtp extends Mail { * failure. * * @since 1.2.0 - * @access public */ - function &getSMTPObject() + public function getSMTPObject() { if (is_object($this->_smtp) !== false) { return $this->_smtp; } include_once 'Net/SMTP.php'; - $this->_smtp = &new Net_SMTP($this->host, + $this->_smtp = new Net_SMTP($this->host, $this->port, - $this->localhost); + $this->localhost, + $this->pipelining, + 0, + $this->socket_options); /* If we still don't have an SMTP object at this point, fail. */ if (is_object($this->_smtp) === false) { @@ -393,9 +413,8 @@ class Mail_smtp extends Mail { * @param string Any value the keyword needs. * * @since 1.2.0 - * @access public */ - function addServiceExtensionParameter($keyword, $value = null) + public function addServiceExtensionParameter($keyword, $value = null) { $this->_extparams[$keyword] = $value; } @@ -406,9 +425,8 @@ class Mail_smtp extends Mail { * @return boolean True if the SMTP connection no longer exists. * * @since 1.1.9 - * @access public */ - function disconnect() + public function disconnect() { /* If we have an SMTP object, disconnect and destroy it. */ if (is_object($this->_smtp) && $this->_smtp->disconnect()) { @@ -428,9 +446,8 @@ class Mail_smtp extends Mail { * @return string A string describing the current SMTP error. * * @since 1.1.7 - * @access private */ - function _error($text, &$error) + protected function _error($text, $error) { /* Split the SMTP response into a code and a response string. */ list($code, $response) = $this->_smtp->getResponse(); diff --git a/lib/Mail/smtpmx.php b/lib/composer/vendor/pear/mail/Mail/smtpmx.php similarity index 93% rename from lib/Mail/smtpmx.php rename to lib/composer/vendor/pear/mail/Mail/smtpmx.php index f0b69408..e26db1be 100644 --- a/lib/Mail/smtpmx.php +++ b/lib/composer/vendor/pear/mail/Mail/smtpmx.php @@ -1,4 +1,4 @@ - - * @copyright 2010 gERD Schaufelberger - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: smtpmx.php 294747 2010-02-08 08:18:33Z clockwerx $ + * @copyright 2010-2017 gERD Schaufelberger + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ * @link http://pear.php.net/package/Mail/ */ @@ -56,7 +58,7 @@ require_once 'Net/SMTP.php'; * @access public * @author gERD Schaufelberger * @package Mail - * @version $Revision: 294747 $ + * @version $Revision$ */ class Mail_smtpmx extends Mail { @@ -386,7 +388,7 @@ class Mail_smtpmx extends Mail { } // Send data - $res = $this->_smtp->data("$textHeaders\r\n$body"); + $res = $this->_smtp->data($body, $textHeaders); if (is_a($res, 'PEAR_Error')) { $info = array('rcpt' => $rcpt); return $this->_raiseError('failed_send_data', $info); diff --git a/lib/composer/vendor/pear/mail/README.rst b/lib/composer/vendor/pear/mail/README.rst new file mode 100644 index 00000000..9697e631 --- /dev/null +++ b/lib/composer/vendor/pear/mail/README.rst @@ -0,0 +1,53 @@ +**** +Mail +**** +Class that provides multiple interfaces for sending emails. + +PEAR's Mail package defines an interface for implementing mailers under the +PEAR hierarchy. +It also provides supporting functions useful to multiple mailer backends. + +Currently supported backends include: + +- PHP's native ``mail()`` function +- sendmail +- SMTP + +This package also provides a `RFC 822`__ email address list validation utility class. + +Use Mail in combination with `Mail_Mime`__ to send HTML emails or emails with +attachments - have a look at the example__. + +__ https://tools.ietf.org/html/rfc822 +__ http://pear.php.net/package/Mail_Mime +__ http://pear.php.net/manual/en/package.mail.mail-mime.example.php + +============ +Installation +============ + +PEAR +==== +:: + + $ pear install mail + +Composer +======== +:: + + $ composer require pear/mail + +===== +Links +===== +Homepage + http://pear.php.net/package/Mail +Source code + https://github.com/pear/Mail +Issue tracker + http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail +Unit test status + https://travis-ci.org/pear/Mail +Packagist + https://packagist.org/packages/pear/mail diff --git a/lib/composer/vendor/pear/mail/composer.json b/lib/composer/vendor/pear/mail/composer.json new file mode 100644 index 00000000..a167cc66 --- /dev/null +++ b/lib/composer/vendor/pear/mail/composer.json @@ -0,0 +1,46 @@ +{ + "authors": [ + { + "email": "chuck@horde.org", + "name": "Chuck Hagenbuch", + "role": "Lead" + }, + { + "email": "richard@phpguru.org", + "name": "Richard Heyes", + "role": "Developer" + }, + { + "email": "alec@alec.pl", + "name": "Aleksander Machniak", + "role": "Developer" + } + ], + "autoload": { + "psr-0": { + "Mail": "./" + } + }, + "description": "Class that provides multiple interfaces for sending emails.", + "homepage": "http://pear.php.net/package/Mail", + "include-path": [ + "./" + ], + "license": "BSD-2-Clause", + "name": "pear/mail", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail", + "source": "https://github.com/pear/Mail" + }, + "type": "library", + "require": { + "php": ">=5.2.1", + "pear/pear-core-minimal": "~1.9" + }, + "require-dev": { + "pear/pear": "*" + }, + "suggest": { + "pear/net_smtp": "Install optionally via your project's composer.json" + } +} diff --git a/lib/composer/vendor/pear/mail/package.xml b/lib/composer/vendor/pear/mail/package.xml new file mode 100644 index 00000000..d08c12c6 --- /dev/null +++ b/lib/composer/vendor/pear/mail/package.xml @@ -0,0 +1,79 @@ + + + Mail + pear.php.net + Class that provides multiple interfaces for sending emails + PEAR's Mail package defines an interface for implementing mailers under the PEAR hierarchy. It also provides supporting functions useful to multiple mailer backends. Currently supported backends include: PHP's native mail() function, sendmail, and SMTP. This package also provides a RFC822 email address list validation utility class. + + Chuck Hagenbuch + chagenbu + chuck@horde.org + no + + + Richard Heyes + richard + richard@phpguru.org + no + + + Aleksander Machniak + alec + alec@alec.pl + yes + + 2017-04-11 + + 1.4.1 + 1.3.0 + + + stable + stable + + New BSD License + +* Loosen recognition of "queued as" server response (PR #10) + +* Bug #20463: domain-literal parsing error +* Bug #20513: Mail_smtp::send() doesn't close socket for smtp connection + + + + + + + + + + + + + + + + + + + + + + + + + 5.2.1 + + + 1.5.6 + + + + + Net_SMTP + pear.php.net + 1.4.1 + + + + + diff --git a/lib/composer/vendor/pear/mail/tests/13659.phpt b/lib/composer/vendor/pear/mail/tests/13659.phpt new file mode 100644 index 00000000..0b57a72d --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/13659.phpt @@ -0,0 +1,25 @@ +--TEST-- +Mail: Test for bug #13659 +--FILE-- + (test)'; +$parser = new Mail_RFC822(); +$result = $parser->parseAddressList($address, 'anydomain.com', TRUE); + +if (!PEAR::isError($result) && is_array($result) && is_object($result[0])) + if ($result[0]->personal == '"Test Student"' && + $result[0]->mailbox == "test" && + $result[0]->host == "mydomain.com" && + is_array($result[0]->comment) && $result[0]->comment[0] == 'test') + { + print("OK"); + } + + +?> +--EXPECT-- +OK diff --git a/lib/composer/vendor/pear/mail/tests/9137.phpt b/lib/composer/vendor/pear/mail/tests/9137.phpt new file mode 100644 index 00000000..ba54c056 --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/9137.phpt @@ -0,0 +1,33 @@ +--TEST-- +Mail: Test for bug #9137 +--FILE-- + 'John Doe', 'email' => 'test@example.com'), + array('name' => 'John Doe\\', 'email' => 'test@example.com'), + array('name' => 'John "Doe', 'email' => 'test@example.com'), + array('name' => 'John "Doe\\', 'email' => 'test@example.com'), +); + +for ($i = 0; $i < count($addresses); $i++) { + // construct the address + $address = "\"" . addslashes($addresses[$i]['name']) . "\" ". + "<".$addresses[$i]['email'].">"; + + $parsedAddresses = Mail_RFC822::parseAddressList($address); + if (is_a($parsedAddresses, 'PEAR_Error')) { + echo $address." :: Failed to validate\n"; + } else { + echo $address." :: Parsed\n"; + } +} + +--EXPECT-- +"John Doe" :: Parsed +"John Doe\\" :: Parsed +"John \"Doe" :: Parsed +"John \"Doe\\" :: Parsed diff --git a/lib/composer/vendor/pear/mail/tests/9137_2.phpt b/lib/composer/vendor/pear/mail/tests/9137_2.phpt new file mode 100644 index 00000000..cc9dcbce --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/9137_2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Mail: Test for bug #9137, take 2 +--FILE-- + '"John Doe" '), + array('raw' => '"John Doe' . chr(92) . '" '), + array('raw' => '"John Doe' . chr(92) . chr(92) . '" '), + array('raw' => '"John Doe' . chr(92) . chr(92) . chr(92) . '" '), + array('raw' => '"John Doe' . chr(92) . chr(92) . chr(92) . chr(92) . '" '), + array('raw' => '"John Doe '), +); + +for ($i = 0; $i < count($addresses); $i++) { + // construct the address + $address = $addresses[$i]['raw']; + $parsedAddresses = Mail_RFC822::parseAddressList($address); + if (PEAR::isError($parsedAddresses)) { + echo $address." :: Failed to validate\n"; + } else { + echo $address." :: Parsed\n"; + } +} + +--EXPECT-- +"John Doe" :: Parsed +"John Doe\" :: Failed to validate +"John Doe\\" :: Parsed +"John Doe\\\" :: Failed to validate +"John Doe\\\\" :: Parsed +"John Doe :: Failed to validate diff --git a/lib/composer/vendor/pear/mail/tests/Makefile b/lib/composer/vendor/pear/mail/tests/Makefile new file mode 100644 index 00000000..bb6b1be4 --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/Makefile @@ -0,0 +1,8 @@ + +clean: + rm -f *.log *.php *.diff *.exp *.out + + + +test: + cd .. && pear run-tests tests/*.phpt && cd tests; diff --git a/lib/composer/vendor/pear/mail/tests/bug17178.phpt b/lib/composer/vendor/pear/mail/tests/bug17178.phpt new file mode 100755 index 00000000..4572dda1 --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/bug17178.phpt @@ -0,0 +1,11 @@ +--TEST-- +Mail_RFC822::parseAddressList does not accept RFC-valid group syntax +--FILE-- +parseAddressList($address, null, true, true)); + +/* Address groups. */ +$address = 'My Group: "Richard" (A comment), ted@example.com (Ted Bloggs), Barney;'; +print_r($parser->parseAddressList($address, null, true, true)); + +/* A valid address with spaces in the local part. */ +$address = '<"Jon Parise"@php.net>'; +print_r($parser->parseAddressList($address, null, true, true)); + +/* An invalid address with spaces in the local part. */ +$address = ''; +$result = $parser->parseAddressList($address, null, true, true); +if (is_a($result, 'PEAR_Error')) echo $result->getMessage() . "\n"; + +/* A valid address with an uncommon TLD. */ +$address = 'jon@host.longtld'; +$result = $parser->parseAddressList($address, null, true, true); +if (is_a($result, 'PEAR_Error')) echo $result->getMessage() . "\n"; + +--EXPECT-- +Array +( + [0] => stdClass Object + ( + [personal] => + [comment] => Array + ( + ) + + [mailbox] => user + [host] => example.com + ) + +) +Array +( + [0] => stdClass Object + ( + [groupname] => My Group + [addresses] => Array + ( + [0] => stdClass Object + ( + [personal] => "Richard" + [comment] => Array + ( + [0] => A comment + ) + + [mailbox] => richard + [host] => localhost + ) + + [1] => stdClass Object + ( + [personal] => + [comment] => Array + ( + [0] => Ted Bloggs + ) + + [mailbox] => ted + [host] => example.com + ) + + [2] => stdClass Object + ( + [personal] => + [comment] => Array + ( + ) + + [mailbox] => Barney + [host] => localhost + ) + + ) + + ) + +) +Array +( + [0] => stdClass Object + ( + [personal] => + [comment] => Array + ( + ) + + [mailbox] => "Jon Parise" + [host] => php.net + ) + +) +Validation failed for: diff --git a/lib/composer/vendor/pear/mail/tests/smtp_error.phpt b/lib/composer/vendor/pear/mail/tests/smtp_error.phpt new file mode 100644 index 00000000..4e8e5a6a --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/smtp_error.phpt @@ -0,0 +1,30 @@ +--TEST-- +Mail: SMTP Error Reporting +--SKIPIF-- +packageExists('Net_SMTP')) die("skip\n"); +--FILE-- + 'bogus.host.tld'); + +/* Create our SMTP-based mailer object. */ +$mailer = Mail::factory('smtp', $params); + +/* Attempt to send an empty message in order to trigger an error. */ +$e = $mailer->send(array(), array(), ''); +if (is_a($e, 'PEAR_Error')) { + $err = $e->getMessage(); + if (preg_match('/Failed to connect to bogus.host.tld:25 \[SMTP: Failed to connect socket:.*/i', $err)) { + echo "OK"; + } +} + +--EXPECT-- +OK \ No newline at end of file diff --git a/lib/composer/vendor/pear/mail/tests/validateQuotedString.php b/lib/composer/vendor/pear/mail/tests/validateQuotedString.php new file mode 100644 index 00000000..bc9a8f4b --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/validateQuotedString.php @@ -0,0 +1,17 @@ +, postmaster@example.com, root'; +// $address_string = "Joe Doe from Somewhere , postmaster@example.com, root"; +echo $address_string . "\n"; + +$address_array = Mail_RFC822::parseAddressList($address_string, "example.com"); +if (!is_array($address_array) || count($address_array) < 1) { + die("something is wrong\n"); +} + +foreach ($address_array as $val) { + echo "mailbox : " . $val->mailbox . "\n"; + echo "host : " . $val->host . "\n"; + echo "personal: " . $val->personal . "\n"; +} +print_r($address_array); diff --git a/lib/composer/vendor/pear/net_smtp/.gitignore b/lib/composer/vendor/pear/net_smtp/.gitignore new file mode 100644 index 00000000..d6a279e8 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/.gitignore @@ -0,0 +1,15 @@ +.DS_Store +Net_SMTP-*.tgz + +# Tests +run-tests.log +/tests/*.diff +/tests/*.exp +/tests/*.log +/tests/*.out +/tests/config.php + +# composer related +composer.lock +composer.phar +vendor diff --git a/lib/composer/vendor/pear/net_smtp/.travis.yml b/lib/composer/vendor/pear/net_smtp/.travis.yml new file mode 100644 index 00000000..59943a13 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/.travis.yml @@ -0,0 +1,11 @@ +language: php +install: + - pear install package.xml +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - nightly +script: pear run-tests -d tests/ diff --git a/lib/composer/vendor/pear/net_smtp/LICENSE b/lib/composer/vendor/pear/net_smtp/LICENSE new file mode 100644 index 00000000..539591cc --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/LICENSE @@ -0,0 +1,69 @@ +-------------------------------------------------------------------- + The PHP License, version 3.01 + Copyright (c) 2002-2015 Jon Parise and Chuck Hagenbuch. + All rights reserved. +-------------------------------------------------------------------- + +Redistribution and use in source and binary forms, with or without +modification, is permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + 3. The name "PHP" must not be used to endorse or promote products + derived from this software without prior written permission. For + written permission, please contact group@php.net. + + 4. Products derived from this software may not be called "PHP", nor + may "PHP" appear in their name, without prior written permission + from group@php.net. You may indicate that your software works in + conjunction with PHP by saying "Foo for PHP" instead of calling + it "PHP Foo" or "phpfoo" + + 5. The PHP Group may publish revised and/or new versions of the + license from time to time. Each version will be given a + distinguishing version number. + Once covered code has been published under a particular version + of the license, you may always continue to use it under the terms + of that version. You may also choose to use such covered code + under the terms of any subsequent version of the license + published by the PHP Group. No one other than the PHP Group has + the right to modify the terms applicable to covered code created + under this License. + + 6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes PHP software, freely available from + ". + +THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND +ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP +DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------- + +This software consists of voluntary contributions made by many +individuals on behalf of the PHP Group. + +The PHP Group can be contacted via Email at group@php.net. + +For more information on the PHP Group and the PHP project, +please see . + +PHP includes the Zend Engine, freely available at +. diff --git a/lib/composer/vendor/pear/net_smtp/Net/SMTP.php b/lib/composer/vendor/pear/net_smtp/Net/SMTP.php new file mode 100644 index 00000000..5593343a --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/Net/SMTP.php @@ -0,0 +1,1256 @@ + | +// | Jon Parise | +// | Damian Alejandro Fernandez Sosa | +// +----------------------------------------------------------------------+ + +require_once 'PEAR.php'; +require_once 'Net/Socket.php'; + +/** + * Provides an implementation of the SMTP protocol using PEAR's + * Net_Socket class. + * + * @package Net_SMTP + * @author Chuck Hagenbuch + * @author Jon Parise + * @author Damian Alejandro Fernandez Sosa + * + * @example basic.php A basic implementation of the Net_SMTP package. + */ +class Net_SMTP +{ + /** + * The server to connect to. + * @var string + */ + public $host = 'localhost'; + + /** + * The port to connect to. + * @var int + */ + public $port = 25; + + /** + * The value to give when sending EHLO or HELO. + * @var string + */ + public $localhost = 'localhost'; + + /** + * List of supported authentication methods, in preferential order. + * @var array + */ + public $auth_methods = array(); + + /** + * Use SMTP command pipelining (specified in RFC 2920) if the SMTP + * server supports it. + * + * When pipeling is enabled, rcptTo(), mailFrom(), sendFrom(), + * somlFrom() and samlFrom() do not wait for a response from the + * SMTP server but return immediately. + * + * @var bool + */ + public $pipelining = false; + + /** + * Number of pipelined commands. + * @var int + */ + protected $pipelined_commands = 0; + + /** + * Should debugging output be enabled? + * @var boolean + */ + protected $debug = false; + + /** + * Debug output handler. + * @var callback + */ + protected $debug_handler = null; + + /** + * The socket resource being used to connect to the SMTP server. + * @var resource + */ + protected $socket = null; + + /** + * Array of socket options that will be passed to Net_Socket::connect(). + * @see stream_context_create() + * @var array + */ + protected $socket_options = null; + + /** + * The socket I/O timeout value in seconds. + * @var int + */ + protected $timeout = 0; + + /** + * The most recent server response code. + * @var int + */ + protected $code = -1; + + /** + * The most recent server response arguments. + * @var array + */ + protected $arguments = array(); + + /** + * Stores the SMTP server's greeting string. + * @var string + */ + protected $greeting = null; + + /** + * Stores detected features of the SMTP server. + * @var array + */ + protected $esmtp = array(); + + /** + * Instantiates a new Net_SMTP object, overriding any defaults + * with parameters that are passed in. + * + * If you have SSL support in PHP, you can connect to a server + * over SSL using an 'ssl://' prefix: + * + * // 465 is a common smtps port. + * $smtp = new Net_SMTP('ssl://mail.host.com', 465); + * $smtp->connect(); + * + * @param string $host The server to connect to. + * @param integer $port The port to connect to. + * @param string $localhost The value to give when sending EHLO or HELO. + * @param boolean $pipelining Use SMTP command pipelining + * @param integer $timeout Socket I/O timeout in seconds. + * @param array $socket_options Socket stream_context_create() options. + * + * @since 1.0 + */ + public function __construct($host = null, $port = null, $localhost = null, + $pipelining = false, $timeout = 0, $socket_options = null + ) { + if (isset($host)) { + $this->host = $host; + } + if (isset($port)) { + $this->port = $port; + } + if (isset($localhost)) { + $this->localhost = $localhost; + } + + $this->pipelining = $pipelining; + $this->socket = new Net_Socket(); + $this->socket_options = $socket_options; + $this->timeout = $timeout; + + /* Include the Auth_SASL package. If the package is available, we + * enable the authentication methods that depend upon it. */ + if (@include_once 'Auth/SASL.php') { + $this->setAuthMethod('CRAM-MD5', array($this, 'authCramMD5')); + $this->setAuthMethod('DIGEST-MD5', array($this, 'authDigestMD5')); + } + + /* These standard authentication methods are always available. */ + $this->setAuthMethod('LOGIN', array($this, 'authLogin'), false); + $this->setAuthMethod('PLAIN', array($this, 'authPlain'), false); + } + + /** + * Set the socket I/O timeout value in seconds plus microseconds. + * + * @param integer $seconds Timeout value in seconds. + * @param integer $microseconds Additional value in microseconds. + * + * @since 1.5.0 + */ + public function setTimeout($seconds, $microseconds = 0) + { + return $this->socket->setTimeout($seconds, $microseconds); + } + + /** + * Set the value of the debugging flag. + * + * @param boolean $debug New value for the debugging flag. + * @param callback $handler Debug handler callback + * + * @since 1.1.0 + */ + public function setDebug($debug, $handler = null) + { + $this->debug = $debug; + $this->debug_handler = $handler; + } + + /** + * Write the given debug text to the current debug output handler. + * + * @param string $message Debug mesage text. + * + * @since 1.3.3 + */ + protected function debug($message) + { + if ($this->debug) { + if ($this->debug_handler) { + call_user_func_array( + $this->debug_handler, array(&$this, $message) + ); + } else { + echo "DEBUG: $message\n"; + } + } + } + + /** + * Send the given string of data to the server. + * + * @param string $data The string of data to send. + * + * @return mixed The number of bytes that were actually written, + * or a PEAR_Error object on failure. + * + * @since 1.1.0 + */ + protected function send($data) + { + $this->debug("Send: $data"); + + $result = $this->socket->write($data); + if (!$result || PEAR::isError($result)) { + $msg = $result ? $result->getMessage() : "unknown error"; + return PEAR::raiseError("Failed to write to socket: $msg"); + } + + return $result; + } + + /** + * Send a command to the server with an optional string of + * arguments. A carriage return / linefeed (CRLF) sequence will + * be appended to each command string before it is sent to the + * SMTP server - an error will be thrown if the command string + * already contains any newline characters. Use send() for + * commands that must contain newlines. + * + * @param string $command The SMTP command to send to the server. + * @param string $args A string of optional arguments to append + * to the command. + * + * @return mixed The result of the send() call. + * + * @since 1.1.0 + */ + protected function put($command, $args = '') + { + if (!empty($args)) { + $command .= ' ' . $args; + } + + if (strcspn($command, "\r\n") !== strlen($command)) { + return PEAR::raiseError('Commands cannot contain newlines'); + } + + return $this->send($command . "\r\n"); + } + + /** + * Read a reply from the SMTP server. The reply consists of a response + * code and a response message. + * + * @param mixed $valid The set of valid response codes. These + * may be specified as an array of integer + * values or as a single integer value. + * @param bool $later Do not parse the response now, but wait + * until the last command in the pipelined + * command group + * + * @return mixed True if the server returned a valid response code or + * a PEAR_Error object is an error condition is reached. + * + * @since 1.1.0 + * + * @see getResponse + */ + protected function parseResponse($valid, $later = false) + { + $this->code = -1; + $this->arguments = array(); + + if ($later) { + $this->pipelined_commands++; + return true; + } + + for ($i = 0; $i <= $this->pipelined_commands; $i++) { + while ($line = $this->socket->readLine()) { + $this->debug("Recv: $line"); + + /* If we receive an empty line, the connection was closed. */ + if (empty($line)) { + $this->disconnect(); + return PEAR::raiseError('Connection was closed'); + } + + /* Read the code and store the rest in the arguments array. */ + $code = substr($line, 0, 3); + $this->arguments[] = trim(substr($line, 4)); + + /* Check the syntax of the response code. */ + if (is_numeric($code)) { + $this->code = (int)$code; + } else { + $this->code = -1; + break; + } + + /* If this is not a multiline response, we're done. */ + if (substr($line, 3, 1) != '-') { + break; + } + } + } + + $this->pipelined_commands = 0; + + /* Compare the server's response code with the valid code/codes. */ + if (is_int($valid) && ($this->code === $valid)) { + return true; + } elseif (is_array($valid) && in_array($this->code, $valid, true)) { + return true; + } + + return PEAR::raiseError('Invalid response code received from server', $this->code); + } + + /** + * Issue an SMTP command and verify its response. + * + * @param string $command The SMTP command string or data. + * @param mixed $valid The set of valid response codes. These + * may be specified as an array of integer + * values or as a single integer value. + * + * @return mixed True on success or a PEAR_Error object on failure. + * + * @since 1.6.0 + */ + public function command($command, $valid) + { + if (PEAR::isError($error = $this->put($command))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse($valid))) { + return $error; + } + + return true; + } + + /** + * Return a 2-tuple containing the last response from the SMTP server. + * + * @return array A two-element array: the first element contains the + * response code as an integer and the second element + * contains the response's arguments as a string. + * + * @since 1.1.0 + */ + public function getResponse() + { + return array($this->code, join("\n", $this->arguments)); + } + + /** + * Return the SMTP server's greeting string. + * + * @return string A string containing the greeting string, or null if + * a greeting has not been received. + * + * @since 1.3.3 + */ + public function getGreeting() + { + return $this->greeting; + } + + /** + * Attempt to connect to the SMTP server. + * + * @param int $timeout The timeout value (in seconds) for the + * socket connection attempt. + * @param bool $persistent Should a persistent socket connection + * be used? + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function connect($timeout = null, $persistent = false) + { + $this->greeting = null; + + $result = $this->socket->connect( + $this->host, $this->port, $persistent, $timeout, $this->socket_options + ); + + if (PEAR::isError($result)) { + return PEAR::raiseError( + 'Failed to connect socket: ' . $result->getMessage() + ); + } + + /* + * Now that we're connected, reset the socket's timeout value for + * future I/O operations. This allows us to have different socket + * timeout values for the initial connection (our $timeout parameter) + * and all other socket operations. + */ + if ($this->timeout > 0) { + if (PEAR::isError($error = $this->setTimeout($this->timeout))) { + return $error; + } + } + + if (PEAR::isError($error = $this->parseResponse(220))) { + return $error; + } + + /* Extract and store a copy of the server's greeting string. */ + list(, $this->greeting) = $this->getResponse(); + + if (PEAR::isError($error = $this->negotiate())) { + return $error; + } + + return true; + } + + /** + * Attempt to disconnect from the SMTP server. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function disconnect() + { + if (PEAR::isError($error = $this->put('QUIT'))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(221))) { + return $error; + } + if (PEAR::isError($error = $this->socket->disconnect())) { + return PEAR::raiseError( + 'Failed to disconnect socket: ' . $error->getMessage() + ); + } + + return true; + } + + /** + * Attempt to send the EHLO command and obtain a list of ESMTP + * extensions available, and failing that just send HELO. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * + * @since 1.1.0 + */ + protected function negotiate() + { + if (PEAR::isError($error = $this->put('EHLO', $this->localhost))) { + return $error; + } + + if (PEAR::isError($this->parseResponse(250))) { + /* If the EHLO failed, try the simpler HELO command. */ + if (PEAR::isError($error = $this->put('HELO', $this->localhost))) { + return $error; + } + if (PEAR::isError($this->parseResponse(250))) { + return PEAR::raiseError('HELO was not accepted', $this->code); + } + + return true; + } + + foreach ($this->arguments as $argument) { + $verb = strtok($argument, ' '); + $len = strlen($verb); + $arguments = substr($argument, $len + 1, strlen($argument) - $len - 1); + $this->esmtp[$verb] = $arguments; + } + + if (!isset($this->esmtp['PIPELINING'])) { + $this->pipelining = false; + } + + return true; + } + + /** + * Returns the name of the best authentication method that the server + * has advertised. + * + * @return mixed Returns a string containing the name of the best + * supported authentication method or a PEAR_Error object + * if a failure condition is encountered. + * @since 1.1.0 + */ + protected function getBestAuthMethod() + { + $available_methods = explode(' ', $this->esmtp['AUTH']); + + foreach ($this->auth_methods as $method => $callback) { + if (in_array($method, $available_methods)) { + return $method; + } + } + + return PEAR::raiseError('No supported authentication methods'); + } + + /** + * Attempt to do SMTP authentication. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $method The requested authentication method. If none is + * specified, the best supported method will be used. + * @param bool $tls Flag indicating whether or not TLS should be attempted. + * @param string $authz An optional authorization identifier. If specified, this + * identifier will be used as the authorization proxy. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function auth($uid, $pwd , $method = '', $tls = true, $authz = '') + { + /* We can only attempt a TLS connection if one has been requested, + * we're running PHP 5.1.0 or later, have access to the OpenSSL + * extension, are connected to an SMTP server which supports the + * STARTTLS extension, and aren't already connected over a secure + * (SSL) socket connection. */ + if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=') + && extension_loaded('openssl') && isset($this->esmtp['STARTTLS']) + && strncasecmp($this->host, 'ssl://', 6) !== 0 + ) { + /* Start the TLS connection attempt. */ + if (PEAR::isError($result = $this->put('STARTTLS'))) { + return $result; + } + if (PEAR::isError($result = $this->parseResponse(220))) { + return $result; + } + if (isset($this->socket_options['ssl']['crypto_method'])) { + $crypto_method = $this->socket_options['ssl']['crypto_method']; + } else { + /* STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT constant does not exist + * and STREAM_CRYPTO_METHOD_SSLv23_CLIENT constant is + * inconsistent across PHP versions. */ + $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT + | @STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT + | @STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; + } + if (PEAR::isError($result = $this->socket->enableCrypto(true, $crypto_method))) { + return $result; + } elseif ($result !== true) { + return PEAR::raiseError('STARTTLS failed'); + } + + /* Send EHLO again to recieve the AUTH string from the + * SMTP server. */ + $this->negotiate(); + } + + if (empty($this->esmtp['AUTH'])) { + return PEAR::raiseError('SMTP server does not support authentication'); + } + + /* If no method has been specified, get the name of the best + * supported method advertised by the SMTP server. */ + if (empty($method)) { + if (PEAR::isError($method = $this->getBestAuthMethod())) { + /* Return the PEAR_Error object from _getBestAuthMethod(). */ + return $method; + } + } else { + $method = strtoupper($method); + if (!array_key_exists($method, $this->auth_methods)) { + return PEAR::raiseError("$method is not a supported authentication method"); + } + } + + if (!isset($this->auth_methods[$method])) { + return PEAR::raiseError("$method is not a supported authentication method"); + } + + if (!is_callable($this->auth_methods[$method], false)) { + return PEAR::raiseError("$method authentication method cannot be called"); + } + + if (is_array($this->auth_methods[$method])) { + list($object, $method) = $this->auth_methods[$method]; + $result = $object->{$method}($uid, $pwd, $authz, $this); + } else { + $func = $this->auth_methods[$method]; + $result = $func($uid, $pwd, $authz, $this); + } + + /* If an error was encountered, return the PEAR_Error object. */ + if (PEAR::isError($result)) { + return $result; + } + + return true; + } + + /** + * Add a new authentication method. + * + * @param string $name The authentication method name (e.g. 'PLAIN') + * @param mixed $callback The authentication callback (given as the name of a + * function or as an (object, method name) array). + * @param bool $prepend Should the new method be prepended to the list of + * available methods? This is the default behavior, + * giving the new method the highest priority. + * + * @return mixed True on success or a PEAR_Error object on failure. + * + * @since 1.6.0 + */ + public function setAuthMethod($name, $callback, $prepend = true) + { + if (!is_string($name)) { + return PEAR::raiseError('Method name is not a string'); + } + + if (!is_string($callback) && !is_array($callback)) { + return PEAR::raiseError('Method callback must be string or array'); + } + + if (is_array($callback)) { + if (!is_object($callback[0]) || !is_string($callback[1])) { + return PEAR::raiseError('Bad mMethod callback array'); + } + } + + if ($prepend) { + $this->auth_methods = array_merge( + array($name => $callback), $this->auth_methods + ); + } else { + $this->auth_methods[$name] = $callback; + } + + return true; + } + + /** + * Authenticates the user using the DIGEST-MD5 method. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $authz The optional authorization proxy identifier. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.1.0 + */ + protected function authDigestMD5($uid, $pwd, $authz = '') + { + if (PEAR::isError($error = $this->put('AUTH', 'DIGEST-MD5'))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + /* 503: Error: already authenticated */ + if ($this->code === 503) { + return true; + } + return $error; + } + + $auth_sasl = new Auth_SASL; + $digest = $auth_sasl->factory('digest-md5'); + $challenge = base64_decode($this->arguments[0]); + $auth_str = base64_encode( + $digest->getResponse($uid, $pwd, $challenge, $this->host, "smtp", $authz) + ); + + if (PEAR::isError($error = $this->put($auth_str))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + return $error; + } + + /* We don't use the protocol's third step because SMTP doesn't + * allow subsequent authentication, so we just silently ignore + * it. */ + if (PEAR::isError($error = $this->put(''))) { + return $error; + } + /* 235: Authentication successful */ + if (PEAR::isError($error = $this->parseResponse(235))) { + return $error; + } + } + + /** + * Authenticates the user using the CRAM-MD5 method. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $authz The optional authorization proxy identifier. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.1.0 + */ + protected function authCRAMMD5($uid, $pwd, $authz = '') + { + if (PEAR::isError($error = $this->put('AUTH', 'CRAM-MD5'))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + /* 503: Error: already authenticated */ + if ($this->code === 503) { + return true; + } + return $error; + } + + $auth_sasl = new Auth_SASL; + $challenge = base64_decode($this->arguments[0]); + $cram = $auth_sasl->factory('cram-md5'); + $auth_str = base64_encode($cram->getResponse($uid, $pwd, $challenge)); + + if (PEAR::isError($error = $this->put($auth_str))) { + return $error; + } + + /* 235: Authentication successful */ + if (PEAR::isError($error = $this->parseResponse(235))) { + return $error; + } + } + + /** + * Authenticates the user using the LOGIN method. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $authz The optional authorization proxy identifier. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.1.0 + */ + protected function authLogin($uid, $pwd, $authz = '') + { + if (PEAR::isError($error = $this->put('AUTH', 'LOGIN'))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + /* 503: Error: already authenticated */ + if ($this->code === 503) { + return true; + } + return $error; + } + + if (PEAR::isError($error = $this->put(base64_encode($uid)))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + return $error; + } + + if (PEAR::isError($error = $this->put(base64_encode($pwd)))) { + return $error; + } + + /* 235: Authentication successful */ + if (PEAR::isError($error = $this->parseResponse(235))) { + return $error; + } + + return true; + } + + /** + * Authenticates the user using the PLAIN method. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $authz The optional authorization proxy identifier. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.1.0 + */ + protected function authPlain($uid, $pwd, $authz = '') + { + if (PEAR::isError($error = $this->put('AUTH', 'PLAIN'))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + /* 503: Error: already authenticated */ + if ($this->code === 503) { + return true; + } + return $error; + } + + $auth_str = base64_encode($authz . chr(0) . $uid . chr(0) . $pwd); + + if (PEAR::isError($error = $this->put($auth_str))) { + return $error; + } + + /* 235: Authentication successful */ + if (PEAR::isError($error = $this->parseResponse(235))) { + return $error; + } + + return true; + } + + /** + * Send the HELO command. + * + * @param string $domain The domain name to say we are. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function helo($domain) + { + if (PEAR::isError($error = $this->put('HELO', $domain))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250))) { + return $error; + } + + return true; + } + + /** + * Return the list of SMTP service extensions advertised by the server. + * + * @return array The list of SMTP service extensions. + * @since 1.3 + */ + public function getServiceExtensions() + { + return $this->esmtp; + } + + /** + * Send the MAIL FROM: command. + * + * @param string $sender The sender (reverse path) to set. + * @param string $params String containing additional MAIL parameters, + * such as the NOTIFY flags defined by RFC 1891 + * or the VERP protocol. + * + * If $params is an array, only the 'verp' option + * is supported. If 'verp' is true, the XVERP + * parameter is appended to the MAIL command. + * If the 'verp' value is a string, the full + * XVERP=value parameter is appended. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function mailFrom($sender, $params = null) + { + $args = "FROM:<$sender>"; + + /* Support the deprecated array form of $params. */ + if (is_array($params) && isset($params['verp'])) { + if ($params['verp'] === true) { + $args .= ' XVERP'; + } elseif (trim($params['verp'])) { + $args .= ' XVERP=' . $params['verp']; + } + } elseif (is_string($params) && !empty($params)) { + $args .= ' ' . $params; + } + + if (PEAR::isError($error = $this->put('MAIL', $args))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the RCPT TO: command. + * + * @param string $recipient The recipient (forward path) to add. + * @param string $params String containing additional RCPT parameters, + * such as the NOTIFY flags defined by RFC 1891. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * + * @since 1.0 + */ + public function rcptTo($recipient, $params = null) + { + $args = "TO:<$recipient>"; + if (is_string($params)) { + $args .= ' ' . $params; + } + + if (PEAR::isError($error = $this->put('RCPT', $args))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(array(250, 251), $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Quote the data so that it meets SMTP standards. + * + * This is provided as a separate public function to facilitate + * easier overloading for the cases where it is desirable to + * customize the quoting behavior. + * + * @param string &$data The message text to quote. The string must be passed + * by reference, and the text will be modified in place. + * + * @since 1.2 + */ + public function quotedata(&$data) + { + /* Because a single leading period (.) signifies an end to the + * data, legitimate leading periods need to be "doubled" ('..'). */ + $data = preg_replace('/^\./m', '..', $data); + + /* Change Unix (\n) and Mac (\r) linefeeds into CRLF's (\r\n). */ + $data = preg_replace('/(?:\r\n|\n|\r(?!\n))/', "\r\n", $data); + } + + /** + * Send the DATA command. + * + * @param mixed $data The message data, either as a string or an open + * file resource. + * @param string $headers The message headers. If $headers is provided, + * $data is assumed to contain only body data. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function data($data, $headers = null) + { + /* Verify that $data is a supported type. */ + if (!is_string($data) && !is_resource($data)) { + return PEAR::raiseError('Expected a string or file resource'); + } + + /* Start by considering the size of the optional headers string. We + * also account for the addition 4 character "\r\n\r\n" separator + * sequence. */ + $size = $headers_size = (is_null($headers)) ? 0 : strlen($headers) + 4; + + if (is_resource($data)) { + $stat = fstat($data); + if ($stat === false) { + return PEAR::raiseError('Failed to get file size'); + } + $size += $stat['size']; + } else { + $size += strlen($data); + } + + /* RFC 1870, section 3, subsection 3 states "a value of zero indicates + * that no fixed maximum message size is in force". Furthermore, it + * says that if "the parameter is omitted no information is conveyed + * about the server's fixed maximum message size". */ + $limit = (isset($this->esmtp['SIZE'])) ? $this->esmtp['SIZE'] : 0; + if ($limit > 0 && $size >= $limit) { + $this->disconnect(); + return PEAR::raiseError('Message size exceeds server limit'); + } + + /* Initiate the DATA command. */ + if (PEAR::isError($error = $this->put('DATA'))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(354))) { + return $error; + } + + /* If we have a separate headers string, send it first. */ + if (!is_null($headers)) { + $this->quotedata($headers); + if (PEAR::isError($result = $this->send($headers . "\r\n\r\n"))) { + return $result; + } + + /* Subtract the headers size now that they've been sent. */ + $size -= $headers_size; + } + + /* Now we can send the message body data. */ + if (is_resource($data)) { + /* Stream the contents of the file resource out over our socket + * connection, line by line. Each line must be run through the + * quoting routine. */ + while (strlen($line = fread($data, 8192)) > 0) { + /* If the last character is an newline, we need to grab the + * next character to check to see if it is a period. */ + while (!feof($data)) { + $char = fread($data, 1); + $line .= $char; + if ($char != "\n") { + break; + } + } + $this->quotedata($line); + if (PEAR::isError($result = $this->send($line))) { + return $result; + } + } + + $last = $line; + } else { + /* + * Break up the data by sending one chunk (up to 512k) at a time. + * This approach reduces our peak memory usage. + */ + for ($offset = 0; $offset < $size;) { + $end = $offset + 512000; + + /* + * Ensure we don't read beyond our data size or span multiple + * lines. quotedata() can't properly handle character data + * that's split across two line break boundaries. + */ + if ($end >= $size) { + $end = $size; + } else { + for (; $end < $size; $end++) { + if ($data[$end] != "\n") { + break; + } + } + } + + /* Extract our chunk and run it through the quoting routine. */ + $chunk = substr($data, $offset, $end - $offset); + $this->quotedata($chunk); + + /* If we run into a problem along the way, abort. */ + if (PEAR::isError($result = $this->send($chunk))) { + return $result; + } + + /* Advance the offset to the end of this chunk. */ + $offset = $end; + } + + $last = $chunk; + } + + /* Don't add another CRLF sequence if it's already in the data */ + $terminator = (substr($last, -2) == "\r\n" ? '' : "\r\n") . ".\r\n"; + + /* Finally, send the DATA terminator sequence. */ + if (PEAR::isError($result = $this->send($terminator))) { + return $result; + } + + /* Verify that the data was successfully received by the server. */ + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the SEND FROM: command. + * + * @param string $path The reverse path to send. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.2.6 + */ + public function sendFrom($path) + { + if (PEAR::isError($error = $this->put('SEND', "FROM:<$path>"))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the SOML FROM: command. + * + * @param string $path The reverse path to send. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.2.6 + */ + public function somlFrom($path) + { + if (PEAR::isError($error = $this->put('SOML', "FROM:<$path>"))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the SAML FROM: command. + * + * @param string $path The reverse path to send. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.2.6 + */ + public function samlFrom($path) + { + if (PEAR::isError($error = $this->put('SAML', "FROM:<$path>"))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the RSET command. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function rset() + { + if (PEAR::isError($error = $this->put('RSET'))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the VRFY command. + * + * @param string $string The string to verify + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function vrfy($string) + { + /* Note: 251 is also a valid response code */ + if (PEAR::isError($error = $this->put('VRFY', $string))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(array(250, 252)))) { + return $error; + } + + return true; + } + + /** + * Send the NOOP command. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function noop() + { + if (PEAR::isError($error = $this->put('NOOP'))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250))) { + return $error; + } + + return true; + } + + /** + * Backwards-compatibility method. identifySender()'s functionality is + * now handled internally. + * + * @return boolean This method always return true. + * + * @since 1.0 + */ + public function identifySender() + { + return true; + } +} diff --git a/lib/composer/vendor/pear/net_smtp/README.rst b/lib/composer/vendor/pear/net_smtp/README.rst new file mode 120000 index 00000000..753c5b5c --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/README.rst @@ -0,0 +1 @@ +docs/guide.txt \ No newline at end of file diff --git a/lib/composer/vendor/pear/net_smtp/composer.json b/lib/composer/vendor/pear/net_smtp/composer.json new file mode 100644 index 00000000..88a39236 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/composer.json @@ -0,0 +1,48 @@ +{ + "authors": [ + { + "email": "jon@php.net", + "name": "Jon Parise", + "homepage": "http://www.indelible.org", + "role": "Lead" + }, + { + "email": "chuck@horde.org", + "name": "Chuck Hagenbuch", + "role": "Lead" + } + ], + "autoload": { + "psr-0": { + "Net": "./" + } + }, + "description": "An implementation of the SMTP protocol", + "keywords": [ + "smtp", + "mail", + "email" + ], + "include-path": [ + "./" + ], + "license": "PHP-3.01", + "name": "pear/net_smtp", + "homepage": "http://pear.github.io/Net_SMTP/", + "support": { + "issues": "https://github.com/pear/Net_SMTP/issues", + "source": "https://github.com/pear/Net_SMTP" + }, + "type": "library", + "require": { + "php": ">=5.4.0", + "pear/pear-core-minimal": "*", + "pear/net_socket": "*" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "pear/auth_sasl": "Install optionally via your project's composer.json" + } +} diff --git a/lib/composer/vendor/pear/net_smtp/docs/docutils.conf b/lib/composer/vendor/pear/net_smtp/docs/docutils.conf new file mode 100644 index 00000000..10aeab46 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/docs/docutils.conf @@ -0,0 +1,16 @@ +[general] +source-link: no +no-datestamp: yes +generator: off +strip-comments: yes +toc-backlinks: no + +[standalone reader] +docinfo_xform: no + +[html4css1 writer] +stylesheet-path: docutils.css +embed-stylesheet: yes +field-name-limit: 20 +cloak-email-addresses: yes +initial-header-level: 2 diff --git a/lib/composer/vendor/pear/net_smtp/docs/docutils.css b/lib/composer/vendor/pear/net_smtp/docs/docutils.css new file mode 100644 index 00000000..fba72b59 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/docs/docutils.css @@ -0,0 +1,108 @@ +body { + font-family: Verdana, Helvetica, Arial, sans-serif; + font-size: 0.8em; + letter-spacing: 0.01em; + line-height: 1.5em; + text-align: justify; + margin: 0 auto; + width: 48em; +} + +a:link, a:visited { + color: #00c; + padding-bottom: 0; + text-decoration: none; + border-bottom: 1px solid #dbd5c5; +} + +a:hover { + padding-bottom: 0; + border-bottom: 2px solid #dbd5c5; +} + +h1, h2, h3 { + font-family: Georgia, "Times New Roman", Times, serif; + font-weight: normal; + line-height: normal; +} + +h1 { + font-size: 2.1em; + letter-spacing: -0.02em; + margin-top: 30px; + text-align: center; +} + +h2 { + font-size: 1.6em; + font-style: italic; + margin: 30px 0 10px 0; +} + +h3 { + font-size: 1.3em; + font-style: italic; + margin-top: 20px; +} + +li { + line-height: 135%; +} + +ul, ol { + margin: 0 0 1em 2em; + padding: 0 0 0 1em; +} + +hr { + background-color: #ccc; + border: 0px none; + color: #eee; + height: 1px; + margin: 30px 0px; +} + +blockquote, pre { + background-color: #f9f9f9; + border: 1px solid #eee; + border-left: 2px solid #ccc; + padding: 1em; +} + +blockquote { + color: #666; + line-height: 1.3em; +} + +pre { + line-height: normal; + overflow: auto; +} + +pre.code-block { + padding-bottom: 0; +} + +tt, pre, code, samp, kbd { + color: #333; + font-family: Consolas, 'Lucida Console', monospace; + font-size: 13px; +} + +label em { + font-weight: normal; +} + +form { + margin: 0; + padding: 0; +} + +.code-block .err { border: 1px solid #FF0000 } /* Error */ +.code-block .k,.kn { color: #369 } /* Keywords */ +.code-block .c,.cm,.cp,.c1 { color: #666; font-style: italic } /* Comments */ +.code-block .n { color: #000 } /* Names */ +.code-block .p { color: #000 } /* Punctuation */ +.code-block .nc,.nf,.nn { color: #333; font-weight: bold } /* Symbol Names */ +.code-block .s { color: #933 } /* Literal.String */ +.code-block .sd { color: #666 } /* Literal.String.Doc */ diff --git a/lib/composer/vendor/pear/net_smtp/docs/guide.txt b/lib/composer/vendor/pear/net_smtp/docs/guide.txt new file mode 100644 index 00000000..a0e61dbd --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/docs/guide.txt @@ -0,0 +1,267 @@ +====================== + The Net_SMTP Package +====================== + +-------------------- + User Documentation +-------------------- + +:Author: Jon Parise +:Contact: jon@php.net + +.. contents:: Table of Contents +.. section-numbering:: + +Dependencies +============ + +The ``PEAR_Error`` Class +------------------------ + +The Net_SMTP package uses the `PEAR_Error`_ class for all of its `error +handling`_. + +The ``Net_Socket`` Package +-------------------------- + +The Net_Socket_ package is used as the basis for all network communications. +Connection options can be specified via the `$socket_options` construction +parameter:: + + $socket_options = array('ssl' => array('verify_peer_name' => false)); + $smtp = new Net_SMTP($host, null, null, false, 0, $socket_options); + +**Note:** PHP 5.6 introduced `OpenSSL changes`_. Peer certificate verification +is now enabled by default. Although not recommended, `$socket_options` can be +used to disable peer verification (as shown above). + +.. _OpenSSL changes: http://php.net/manual/en/migration56.openssl.php + +The ``Auth_SASL`` Package +------------------------- + +The `Auth_SASL`_ package is an optional dependency. If it is available, the +Net_SMTP package will be able to support the DIGEST-MD5_ and CRAM-MD5_ SMTP +authentication methods. Otherwise, only the LOGIN_ and PLAIN_ methods will +be available. + +Error Handling +============== + +All of the Net_SMTP class's public methods return a PEAR_Error_ object if an +error occurs. The standard way to check for a PEAR_Error object is by using +`PEAR::isError()`_:: + + if (PEAR::isError($error = $smtp->connect())) { + die($error->getMessage()); + } + +.. _PEAR::isError(): http://pear.php.net/manual/en/core.pear.pear.iserror.php + +SMTP Authentication +=================== + +The Net_SMTP package supports the SMTP authentication standard (as defined +by RFC-2554_). The Net_SMTP package supports the following authentication +methods, in order of preference: + +.. _RFC-2554: http://www.ietf.org/rfc/rfc2554.txt + +DIGEST-MD5 +---------- + +The DIGEST-MD5 authentication method uses `RSA Data Security Inc.`_'s MD5 +Message Digest algorithm. It is considered the most secure method of SMTP +authentication. + +**Note:** The DIGEST-MD5 authentication method is only supported if the +AUTH_SASL_ package is available. + +.. _RSA Data Security Inc.: http://www.rsasecurity.com/ + +CRAM-MD5 +-------- + +The CRAM-MD5 authentication method has been superseded by the DIGEST-MD5_ +method in terms of security. It is provided here for compatibility with +older SMTP servers that may not support the newer DIGEST-MD5 algorithm. + +**Note:** The CRAM-MD5 authentication method is only supported if the +AUTH_SASL_ package is available. + +LOGIN +----- + +The LOGIN authentication method encrypts the user's password using the +Base64_ encoding scheme. Because decrypting a Base64-encoded string is +trivial, LOGIN is not considered a secure authentication method and should +be avoided. + +.. _Base64: http://www.php.net/manual/en/function.base64-encode.php + +PLAIN +----- + +The PLAIN authentication method sends the user's password in plain text. +This method of authentication is not secure and should be avoided. + +Secure Connections +================== + +If `secure socket transports`_ have been enabled in PHP, it is possible to +establish a secure connection to the remote SMTP server:: + + $smtp = new Net_SMTP('ssl://mail.example.com', 465); + +This example connects to ``mail.example.com`` on port 465 (a common SMTPS +port) using the ``ssl://`` transport. + +.. _secure socket transports: http://www.php.net/transports + +Sending Data +============ + +Message data is sent using the ``data()`` method. The data can be supplied +as a single string or as an open file resource. + +If a string is provided, it is passed through the `data quoting`_ system and +sent to the socket connection as a single block. These operations are all +memory-based, so sending large messages may result in high memory usage. + +If an open file resource is provided, the ``data()`` method will read the +message data from the file line-by-line. Each chunk will be quoted and sent +to the socket connection individually, reducing the overall memory overhead of +this data sending operation. + +Header data can be specified separately from message body data by passing it +as the optional second parameter to ``data()``. This is especially useful +when an open file resource is being used to supply message data because it +allows header fields (like *Subject:*) to be built dynamically at runtime. + +:: + + $smtp->data($fp, "Subject: My Subject"); + +Data Quoting +============ + +By default, all outbound string data is quoted in accordance with SMTP +standards. This means that all native Unix (``\n``) and Mac (``\r``) line +endings are converted to Internet-standard CRLF (``\r\n``) line endings. +Also, because the SMTP protocol uses a single leading period (``.``) to signal +an end to the message data, single leading periods in the original data +string are "doubled" (e.g. "``..``"). + +These string transformation can be expensive when large blocks of data are +involved. For example, the Net_SMTP package is not aware of MIME parts (it +just sees the MIME message as one big string of characters), so it is not +able to skip non-text attachments when searching for characters that may +need to be quoted. + +Because of this, it is possible to extend the Net_SMTP class in order to +implement your own custom quoting routine. Just create a new class based on +the Net_SMTP class and reimplement the ``quotedata()`` method:: + + require 'Net_SMTP.php'; + + class Net_SMTP_custom extends Net_SMTP + { + function quotedata($data) + { + /* Perform custom data quoting */ + } + } + +Note that the ``$data`` parameter will be passed to the ``quotedata()`` +function `by reference`_. This means that you can operate directly on +``$data``. It also the overhead of copying a large ``$data`` string to and +from the ``quotedata()`` method. + +.. _by reference: http://www.php.net/manual/en/language.references.pass.php + +Server Responses +================ + +The Net_SMTP package retains the server's last response for further +inspection. The ``getResponse()`` method returns a 2-tuple (two element +array) containing the server's response code as an integer and the response's +arguments as a string. + +Upon a successful connection, the server's greeting string is available via +the ``getGreeting()`` method. + +Debugging +========= + +The Net_SMTP package contains built-in debugging output routines (disabled by +default). Debugging output must be explicitly enabled via the ``setDebug()`` +method:: + + $smtp->setDebug(true); + +The debugging messages will be sent to the standard output stream by default. +If you need more control over the output, you can optionally install your own +debug handler. + +:: + + function debugHandler($smtp, $message) + { + echo "[$smtp->host] $message\n"; + } + + $smtp->setDebug(true, "debugHandler"); + + +Examples +======== + +Basic Use +--------- + +The following script demonstrates how a simple email message can be sent +using the Net_SMTP package:: + + require 'Net/SMTP.php'; + + $host = 'mail.example.com'; + $from = 'user@example.com'; + $rcpt = array('recipient1@example.com', 'recipient2@example.com'); + $subj = "Subject: Test Message\n"; + $body = "Body Line 1\nBody Line 2"; + + /* Create a new Net_SMTP object. */ + if (! ($smtp = new Net_SMTP($host))) { + die("Unable to instantiate Net_SMTP object\n"); + } + + /* Connect to the SMTP server. */ + if (PEAR::isError($e = $smtp->connect())) { + die($e->getMessage() . "\n"); + } + + /* Send the 'MAIL FROM:' SMTP command. */ + if (PEAR::isError($smtp->mailFrom($from))) { + die("Unable to set sender to <$from>\n"); + } + + /* Address the message to each of the recipients. */ + foreach ($rcpt as $to) { + if (PEAR::isError($res = $smtp->rcptTo($to))) { + die("Unable to add recipient <$to>: " . $res->getMessage() . "\n"); + } + } + + /* Set the body of the message. */ + if (PEAR::isError($smtp->data($subj . "\r\n" . $body))) { + die("Unable to send data\n"); + } + + /* Disconnect from the SMTP server. */ + $smtp->disconnect(); + +.. _PEAR_Error: http://pear.php.net/manual/en/core.pear.pear-error.php +.. _Net_Socket: http://pear.php.net/package/Net_Socket +.. _Auth_SASL: http://pear.php.net/package/Auth_SASL + +.. vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab textwidth=78 ft=rst: diff --git a/lib/composer/vendor/pear/net_smtp/examples/basic.php b/lib/composer/vendor/pear/net_smtp/examples/basic.php new file mode 100644 index 00000000..0f09fe05 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/examples/basic.php @@ -0,0 +1,39 @@ +connect())) { + die($e->getMessage() . "\n"); +} +$smtp->auth('username','password'); +/* Send the 'MAIL FROM:' SMTP command. */ +if (PEAR::isError($smtp->mailFrom($from))) { + die("Unable to set sender to <$from>\n"); +} + +/* Address the message to each of the recipients. */ +foreach ($rcpt as $to) { + if (PEAR::isError($res = $smtp->rcptTo($to))) { + die("Unable to add recipient <$to>: " . $res->getMessage() . "\n"); + } +} + +/* Set the body of the message. */ +if (PEAR::isError($smtp->data($subj . "\r\n" . $body))) { + die("Unable to send data\n"); +} + +/* Disconnect from the SMTP server. */ +$smtp->disconnect(); diff --git a/lib/composer/vendor/pear/net_smtp/package.xml b/lib/composer/vendor/pear/net_smtp/package.xml new file mode 100644 index 00000000..2183ef98 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/package.xml @@ -0,0 +1,77 @@ + + + Net_SMTP + pear.php.net + An implementation of the SMTP protocol + Provides an implementation of the SMTP protocol using PEAR's Net_Socket class. + + Jon Parise + jon + jon@php.net + yes + + + Chuck Hagenbuch + chagenbu + chuck@horde.org + yes + + 2017-01-14 + + + 1.7.3 + 1.3.0 + + + stable + stable + + PHP License + - Fix MIME boundary size calculation (#34) +- Workaround E_DEPRECATED warning on Auth_SASL::factory() call (#29) + + + + + + + + + + + + + + + + + + + + + + + 5.4.0 + + + 1.4.3 + + + Net_Socket + pear.php.net + 1.0.7 + + + + + Auth_SASL + pear.php.net + 1.0.5 + + + + + diff --git a/lib/composer/vendor/pear/net_smtp/phpdoc.sh b/lib/composer/vendor/pear/net_smtp/phpdoc.sh new file mode 100755 index 00000000..6d8b414c --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/phpdoc.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +phpdoc -f Net/SMTP.php -t docs/api -p -ti "Net_SMTP Package API" -dn Net_SMTP -dc Net_SMTP -ed examples diff --git a/lib/composer/vendor/pear/net_smtp/tests/auth.phpt b/lib/composer/vendor/pear/net_smtp/tests/auth.phpt new file mode 100644 index 00000000..e227f14c --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/tests/auth.phpt @@ -0,0 +1,28 @@ +--TEST-- +Net_SMTP: SMTP Authentication +--SKIPIF-- +connect())) { + die($e->getMessage() . "\n"); +} + +if (PEAR::isError($e = $smtp->auth(TEST_AUTH_USER, TEST_AUTH_PASS))) { + die("Authentication failure\n"); +} + +$smtp->disconnect(); + +echo 'Success!'; + +--EXPECT-- +Success! diff --git a/lib/composer/vendor/pear/net_smtp/tests/basic.phpt b/lib/composer/vendor/pear/net_smtp/tests/basic.phpt new file mode 100644 index 00000000..5d85d2fd --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/tests/basic.phpt @@ -0,0 +1,42 @@ +--TEST-- +Net_SMTP: Basic Functionality +--SKIPIF-- +connect())) { + die($e->getMessage() . "\n"); +} + +if (PEAR::isError($e = $smtp->auth(TEST_AUTH_USER, TEST_AUTH_PASS))) { + die("Authentication failure\n"); +} + +if (PEAR::isError($smtp->mailFrom(TEST_FROM))) { + die('Unable to set sender to <' . TEST_FROM . ">\n"); +} + +if (PEAR::isError($res = $smtp->rcptTo(TEST_TO))) { + die('Unable to add recipient <' . TEST_TO . '>: ' . + $res->getMessage() . "\n"); +} + +$headers = 'Subject: ' . TEST_SUBJECT; +if (PEAR::isError($smtp->data(TEST_BODY, $headers))) { + die("Unable to send data\n"); +} + +$smtp->disconnect(); + +echo 'Success!'; + +--EXPECT-- +Success! diff --git a/lib/composer/vendor/pear/net_smtp/tests/config.php.dist b/lib/composer/vendor/pear/net_smtp/tests/config.php.dist new file mode 100644 index 00000000..fe4a0c97 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/tests/config.php.dist @@ -0,0 +1,15 @@ + "\r\n", + "\r\n" => "\r\n", + "\nxx" => "\r\nxx", + "xx\n" => "xx\r\n", + "xx\nxx" => "xx\r\nxx", + "\n\nxx" => "\r\n\r\nxx", + "xx\n\nxx" => "xx\r\n\r\nxx", + "xx\n\n" => "xx\r\n\r\n", + "\r\nxx" => "\r\nxx", + "xx\r\n" => "xx\r\n", + "xx\r\nxx" => "xx\r\nxx", + "\r\n\r\nxx" => "\r\n\r\nxx", + "xx\r\n\r\nxx" => "xx\r\n\r\nxx", + "xx\r\n\r\n" => "xx\r\n\r\n", + "\r\n\nxx" => "\r\n\r\nxx", + "\n\r\nxx" => "\r\n\r\nxx", + "xx\r\n\nxx" => "xx\r\n\r\nxx", + "xx\n\r\nxx" => "xx\r\n\r\nxx", + "xx\r\n\n" => "xx\r\n\r\n", + "xx\n\r\n" => "xx\r\n\r\n", + "\r" => "\r\n", + "\rxx" => "\r\nxx", + "xx\rxx" => "xx\r\nxx", + "xx\r" => "xx\r\n", + "\r\r" => "\r\n\r\n", + "\r\rxx" => "\r\n\r\nxx", + "xx\r\rxx" => "xx\r\n\r\nxx", + "xx\r\r" => "xx\r\n\r\n", + "xx\rxx\nxx\r\nxx" => "xx\r\nxx\r\nxx\r\nxx", + "\r\r\n\n" => "\r\n\r\n\r\n", + + /* Dots */ + "." => "..", + "xxx\n." => "xxx\r\n..", + "xxx\n.\nxxx" => "xxx\r\n..\r\nxxx", + "xxx.\n.xxx" => "xxx.\r\n..xxx", +); + +function literal($x) +{ + return str_replace(array("\r", "\n"), array('\r', '\n'), $x); +} + +$smtp = new Net_SMTP(); +$error = false; +foreach ($tests as $input => $expected) { + $output = $input; + $smtp->quotedata($output); + if ($output != $expected) { + printf("Error: '%s' => '%s' (expected: '%s')", + literal($input), literal($output), literal($expected)); + $error = true; + } +} + +if (!$error) { + echo "success\n"; +} + +--EXPECT-- +success diff --git a/lib/composer/vendor/pear/net_socket/.gitignore b/lib/composer/vendor/pear/net_socket/.gitignore new file mode 100644 index 00000000..e2b2f027 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/.gitignore @@ -0,0 +1,6 @@ +# composer related +composer.lock +composer.phar +vendor + +*.tgz diff --git a/lib/composer/vendor/pear/net_socket/.travis.yml b/lib/composer/vendor/pear/net_socket/.travis.yml new file mode 100644 index 00000000..2acb4d64 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/.travis.yml @@ -0,0 +1,21 @@ +language: php +sudo: false +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 +script: + - pear list + - pear channel-update pear.php.net + - pear upgrade --force pear/pear-1.10.1 + - pear list + - pear install --force package.xml + - pear list + - pear package + - pear package-validate + - pear install --force *.tgz + - pear list + - composer install + - ./vendor/bin/phpunit -c phpunit.xml.dist diff --git a/lib/composer/vendor/pear/net_socket/LICENSE b/lib/composer/vendor/pear/net_socket/LICENSE new file mode 100644 index 00000000..5a6b12a0 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/LICENSE @@ -0,0 +1,9 @@ +Copyright 1997-2017 The PHP Group + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/composer/vendor/pear/net_socket/Net/Socket.php b/lib/composer/vendor/pear/net_socket/Net/Socket.php new file mode 100644 index 00000000..8df768d9 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/Net/Socket.php @@ -0,0 +1,723 @@ + + * @author Chuck Hagenbuch + * @copyright 1997-2017 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php BSD-2-Clause + * @link http://pear.php.net/packages/Net_Socket + */ + +require_once 'PEAR.php'; + +define('NET_SOCKET_READ', 1); +define('NET_SOCKET_WRITE', 2); +define('NET_SOCKET_ERROR', 4); + +/** + * Generalized Socket class. + * + * @category Net + * @package Net_Socket + * @author Stig Bakken + * @author Chuck Hagenbuch + * @copyright 1997-2017 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php BSD-2-Clause + * @link http://pear.php.net/packages/Net_Socket + */ +class Net_Socket extends PEAR +{ + /** + * Socket file pointer. + * @var resource $fp + */ + public $fp = null; + + /** + * Whether the socket is blocking. Defaults to true. + * @var boolean $blocking + */ + public $blocking = true; + + /** + * Whether the socket is persistent. Defaults to false. + * @var boolean $persistent + */ + public $persistent = false; + + /** + * The IP address to connect to. + * @var string $addr + */ + public $addr = ''; + + /** + * The port number to connect to. + * @var integer $port + */ + public $port = 0; + + /** + * Number of seconds to wait on socket operations before assuming + * there's no more data. Defaults to no timeout. + * @var integer|float $timeout + */ + public $timeout = null; + + /** + * Number of bytes to read at a time in readLine() and + * readAll(). Defaults to 2048. + * @var integer $lineLength + */ + public $lineLength = 2048; + + /** + * The string to use as a newline terminator. Usually "\r\n" or "\n". + * @var string $newline + */ + public $newline = "\r\n"; + + /** + * Connect to the specified port. If called when the socket is + * already connected, it disconnects and connects again. + * + * @param string $addr IP address or host name (may be with protocol prefix). + * @param integer $port TCP port number. + * @param boolean $persistent (optional) Whether the connection is + * persistent (kept open between requests + * by the web server). + * @param integer $timeout (optional) Connection socket timeout. + * @param array $options See options for stream_context_create. + * + * @access public + * + * @return boolean|PEAR_Error True on success or a PEAR_Error on failure. + */ + public function connect( + $addr, + $port = 0, + $persistent = null, + $timeout = null, + $options = null + ) { + if (is_resource($this->fp)) { + @fclose($this->fp); + $this->fp = null; + } + + if (!$addr) { + return $this->raiseError('$addr cannot be empty'); + } else { + if (strspn($addr, ':.0123456789') === strlen($addr)) { + $this->addr = strpos($addr, ':') !== false ? '[' . $addr . ']' : $addr; + } else { + $this->addr = $addr; + } + } + + $this->port = $port % 65536; + + if ($persistent !== null) { + $this->persistent = $persistent; + } + + $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen'; + $errno = 0; + $errstr = ''; + + $old_track_errors = @ini_set('track_errors', 1); + + if ($timeout <= 0) { + $timeout = @ini_get('default_socket_timeout'); + } + + if ($options && function_exists('stream_context_create')) { + $context = stream_context_create($options); + + // Since PHP 5 fsockopen doesn't allow context specification + if (function_exists('stream_socket_client')) { + $flags = STREAM_CLIENT_CONNECT; + + if ($this->persistent) { + $flags = STREAM_CLIENT_PERSISTENT; + } + + $addr = $this->addr . ':' . $this->port; + $fp = @stream_socket_client($addr, $errno, $errstr, + $timeout, $flags, $context); + } else { + $fp = @$openfunc($this->addr, $this->port, $errno, + $errstr, $timeout, $context); + } + } else { + $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout); + } + + if (!$fp) { + if ($errno === 0 && !strlen($errstr) && isset($php_errormsg)) { + $errstr = $php_errormsg; + } + @ini_set('track_errors', $old_track_errors); + + return $this->raiseError($errstr, $errno); + } + + @ini_set('track_errors', $old_track_errors); + $this->fp = $fp; + $this->setTimeout(); + + return $this->setBlocking($this->blocking); + } + + /** + * Disconnects from the peer, closes the socket. + * + * @access public + * @return mixed true on success or a PEAR_Error instance otherwise + */ + public function disconnect() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + @fclose($this->fp); + $this->fp = null; + + return true; + } + + /** + * Set the newline character/sequence to use. + * + * @param string $newline Newline character(s) + * @return boolean True + */ + public function setNewline($newline) + { + $this->newline = $newline; + + return true; + } + + /** + * Find out if the socket is in blocking mode. + * + * @access public + * @return boolean The current blocking mode. + */ + public function isBlocking() + { + return $this->blocking; + } + + /** + * Sets whether the socket connection should be blocking or + * not. A read call to a non-blocking socket will return immediately + * if there is no data available, whereas it will block until there + * is data for blocking sockets. + * + * @param boolean $mode True for blocking sockets, false for nonblocking. + * + * @access public + * @return mixed true on success or a PEAR_Error instance otherwise + */ + public function setBlocking($mode) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $this->blocking = $mode; + stream_set_blocking($this->fp, (int)$this->blocking); + + return true; + } + + /** + * Sets the timeout value on socket descriptor, + * expressed in the sum of seconds and microseconds + * + * @param integer $seconds Seconds. + * @param integer $microseconds Microseconds, optional. + * + * @access public + * @return mixed True on success or false on failure or + * a PEAR_Error instance when not connected + */ + public function setTimeout($seconds = null, $microseconds = null) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + if ($seconds === null && $microseconds === null) { + $seconds = (int)$this->timeout; + $microseconds = (int)(($this->timeout - $seconds) * 1000000); + } else { + $this->timeout = $seconds + $microseconds / 1000000; + } + + if ($this->timeout > 0) { + return stream_set_timeout($this->fp, (int)$seconds, (int)$microseconds); + } else { + return false; + } + } + + /** + * Sets the file buffering size on the stream. + * See php's stream_set_write_buffer for more information. + * + * @param integer $size Write buffer size. + * + * @access public + * @return mixed on success or an PEAR_Error object otherwise + */ + public function setWriteBuffer($size) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $returned = stream_set_write_buffer($this->fp, $size); + if ($returned === 0) { + return true; + } + + return $this->raiseError('Cannot set write buffer.'); + } + + /** + * Returns information about an existing socket resource. + * Currently returns four entries in the result array: + * + *

+ * timed_out (bool) - The socket timed out waiting for data
+ * blocked (bool) - The socket was blocked
+ * eof (bool) - Indicates EOF event
+ * unread_bytes (int) - Number of bytes left in the socket buffer
+ *

+ * + * @access public + * @return mixed Array containing information about existing socket + * resource or a PEAR_Error instance otherwise + */ + public function getStatus() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return stream_get_meta_data($this->fp); + } + + /** + * Get a specified line of data + * + * @param int $size Reading ends when size - 1 bytes have been read, + * or a newline or an EOF (whichever comes first). + * If no size is specified, it will keep reading from + * the stream until it reaches the end of the line. + * + * @access public + * @return mixed $size bytes of data from the socket, or a PEAR_Error if + * not connected. If an error occurs, FALSE is returned. + */ + public function gets($size = null) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + if (null === $size) { + return @fgets($this->fp); + } else { + return @fgets($this->fp, $size); + } + } + + /** + * Read a specified amount of data. This is guaranteed to return, + * and has the added benefit of getting everything in one fread() + * chunk; if you know the size of the data you're getting + * beforehand, this is definitely the way to go. + * + * @param integer $size The number of bytes to read from the socket. + * + * @access public + * @return string $size bytes of data from the socket, or a PEAR_Error if + * not connected. + */ + public function read($size) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return @fread($this->fp, $size); + } + + /** + * Write a specified amount of data. + * + * @param string $data Data to write. + * @param integer $blocksize Amount of data to write at once. + * NULL means all at once. + * + * @access public + * @return mixed If the socket is not connected, returns an instance of + * PEAR_Error. + * If the write succeeds, returns the number of bytes written. + * If the write fails, returns false. + * If the socket times out, returns an instance of PEAR_Error. + */ + public function write($data, $blocksize = null) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + if (null === $blocksize && !OS_WINDOWS) { + $written = @fwrite($this->fp, $data); + + // Check for timeout or lost connection + if ($written === false) { + $meta_data = $this->getStatus(); + + if (!is_array($meta_data)) { + return $meta_data; // PEAR_Error + } + + if (!empty($meta_data['timed_out'])) { + return $this->raiseError('timed out'); + } + } + + return $written; + } else { + if (null === $blocksize) { + $blocksize = 1024; + } + + $pos = 0; + $size = strlen($data); + while ($pos < $size) { + $written = @fwrite($this->fp, substr($data, $pos, $blocksize)); + + // Check for timeout or lost connection + if ($written === false) { + $meta_data = $this->getStatus(); + + if (!is_array($meta_data)) { + return $meta_data; // PEAR_Error + } + + if (!empty($meta_data['timed_out'])) { + return $this->raiseError('timed out'); + } + + return $written; + } + + $pos += $written; + } + + return $pos; + } + } + + /** + * Write a line of data to the socket, followed by a trailing newline. + * + * @param string $data Data to write + * + * @access public + * @return mixed fwrite() result, or PEAR_Error when not connected + */ + public function writeLine($data) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return fwrite($this->fp, $data . $this->newline); + } + + /** + * Tests for end-of-file on a socket descriptor. + * + * Also returns true if the socket is disconnected. + * + * @access public + * @return bool + */ + public function eof() + { + return (!is_resource($this->fp) || feof($this->fp)); + } + + /** + * Reads a byte of data + * + * @access public + * @return integer 1 byte of data from the socket, or a PEAR_Error if + * not connected. + */ + public function readByte() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return ord(@fread($this->fp, 1)); + } + + /** + * Reads a word of data + * + * @access public + * @return integer 1 word of data from the socket, or a PEAR_Error if + * not connected. + */ + public function readWord() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $buf = @fread($this->fp, 2); + + return (ord($buf[0]) + (ord($buf[1]) << 8)); + } + + /** + * Reads an int of data + * + * @access public + * @return integer 1 int of data from the socket, or a PEAR_Error if + * not connected. + */ + public function readInt() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $buf = @fread($this->fp, 4); + + return (ord($buf[0]) + (ord($buf[1]) << 8) + + (ord($buf[2]) << 16) + (ord($buf[3]) << 24)); + } + + /** + * Reads a zero-terminated string of data + * + * @access public + * @return string, or a PEAR_Error if + * not connected. + */ + public function readString() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $string = ''; + while (($char = @fread($this->fp, 1)) !== "\x00") { + $string .= $char; + } + + return $string; + } + + /** + * Reads an IP Address and returns it in a dot formatted string + * + * @access public + * @return string Dot formatted string, or a PEAR_Error if + * not connected. + */ + public function readIPAddress() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $buf = @fread($this->fp, 4); + + return sprintf('%d.%d.%d.%d', ord($buf[0]), ord($buf[1]), + ord($buf[2]), ord($buf[3])); + } + + /** + * Read until either the end of the socket or a newline, whichever + * comes first. Strips the trailing newline from the returned data. + * + * @access public + * @return string All available data up to a newline, without that + * newline, or until the end of the socket, or a PEAR_Error if + * not connected. + */ + public function readLine() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $line = ''; + + $timeout = time() + $this->timeout; + + while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) { + $line .= @fgets($this->fp, $this->lineLength); + if (substr($line, -1) == "\n") { + return rtrim($line, $this->newline); + } + } + + return $line; + } + + /** + * Read until the socket closes, or until there is no more data in + * the inner PHP buffer. If the inner buffer is empty, in blocking + * mode we wait for at least 1 byte of data. Therefore, in + * blocking mode, if there is no data at all to be read, this + * function will never exit (unless the socket is closed on the + * remote end). + * + * @access public + * + * @return string All data until the socket closes, or a PEAR_Error if + * not connected. + */ + public function readAll() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $data = ''; + $timeout = time() + $this->timeout; + + while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) { + $data .= @fread($this->fp, $this->lineLength); + } + + return $data; + } + + /** + * Runs the equivalent of the select() system call on the socket + * with a timeout specified by tv_sec and tv_usec. + * + * @param integer $state Which of read/write/error to check for. + * @param integer $tv_sec Number of seconds for timeout. + * @param integer $tv_usec Number of microseconds for timeout. + * + * @access public + * @return False if select fails, integer describing which of read/write/error + * are ready, or PEAR_Error if not connected. + */ + public function select($state, $tv_sec, $tv_usec = 0) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $read = null; + $write = null; + $except = null; + if ($state & NET_SOCKET_READ) { + $read[] = $this->fp; + } + if ($state & NET_SOCKET_WRITE) { + $write[] = $this->fp; + } + if ($state & NET_SOCKET_ERROR) { + $except[] = $this->fp; + } + if (false === ($sr = stream_select($read, $write, $except, + $tv_sec, $tv_usec)) + ) { + return false; + } + + $result = 0; + if (count($read)) { + $result |= NET_SOCKET_READ; + } + if (count($write)) { + $result |= NET_SOCKET_WRITE; + } + if (count($except)) { + $result |= NET_SOCKET_ERROR; + } + + return $result; + } + + /** + * Turns encryption on/off on a connected socket. + * + * @param bool $enabled Set this parameter to true to enable encryption + * and false to disable encryption. + * @param integer $type Type of encryption. See stream_socket_enable_crypto() + * for values. + * + * @see http://se.php.net/manual/en/function.stream-socket-enable-crypto.php + * @access public + * @return false on error, true on success and 0 if there isn't enough data + * and the user should try again (non-blocking sockets only). + * A PEAR_Error object is returned if the socket is not + * connected + */ + public function enableCrypto($enabled, $type) + { + if (version_compare(phpversion(), '5.1.0', '>=')) { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return @stream_socket_enable_crypto($this->fp, $enabled, $type); + } else { + $msg = 'Net_Socket::enableCrypto() requires php version >= 5.1.0'; + + return $this->raiseError($msg); + } + } + +} diff --git a/lib/composer/vendor/pear/net_socket/README.md b/lib/composer/vendor/pear/net_socket/README.md new file mode 100644 index 00000000..d6eb5302 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/README.md @@ -0,0 +1,43 @@ +# Net_Socket - Network Socket Interface + +[![Build Status](https://travis-ci.org/pear/Net_Socket.svg?branch=master)](https://travis-ci.org/pear/Net_Socket) + + +Net_Socket is a class interface to TCP sockets. It provides blocking +and non-blocking operation, with different reading and writing modes +(byte-wise, block-wise, line-wise and special formats like network +byte-order ip addresses). + +[Homepage](http://pear.php.net/package/Net_Socket/) + + +## Installation +For a PEAR installation that downloads from the PEAR channel: + +`$ pear install pear/net_socket` + +For a PEAR installation from a previously downloaded tarball: + +`$ pear install Net_Socket-*.tgz` + +For a PEAR installation from a code clone: + +`$ pear install package.xml` + +For a local composer installation: + +`$ composer install` + +To add as a dependency to your composer-managed application: + +`$composer require pear/net_socket` + + +## Tests +Run the tests from a local composer installation: + +`$ ./vendor/bin/phpunit` + + +## License +BSD-2 license diff --git a/lib/composer/vendor/pear/net_socket/composer.json b/lib/composer/vendor/pear/net_socket/composer.json new file mode 100644 index 00000000..7bf46ecb --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/composer.json @@ -0,0 +1,42 @@ +{ + "authors": [ + { + "email": "chuck@horde.org", + "name": "Chuck Hagenbuch", + "role": "Lead" + }, + { + "email": "stig@php.net", + "name": "Stig Bakken", + "role": "Lead" + }, + { + "email": "alec@php.net", + "name": "Aleksander Machniak", + "role": "Lead" + } + ], + "autoload": { + "psr-0": { + "Net": "./" + } + }, + "description": "More info available on: http://pear.php.net/package/Net_Socket", + "include-path": [ + "./" + ], + "license": "BSD-2-Clause", + "name": "pear/net_socket", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Socket", + "source": "https://github.com/pear/Net_Socket" + }, + "type": "library", + "require": { + "php": ">=5.4.0", + "pear/pear_exception": "@stable" + }, + "require-dev": { + "phpunit/phpunit": "^4" + } +} diff --git a/lib/composer/vendor/pear/net_socket/package.xml b/lib/composer/vendor/pear/net_socket/package.xml new file mode 100644 index 00000000..116f6d28 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/package.xml @@ -0,0 +1,59 @@ + + + Net_Socket + pear.php.net + Network Socket Interface + Net_Socket is a class interface to TCP sockets. It provides blocking + and non-blocking operation, with different reading and writing modes + (byte-wise, block-wise, line-wise and special formats like network + byte-order ip addresses). + + Chuck Hagenbuch + chagenbu + chuck@horde.org + no + + + Stig Bakken + ssb + stig@php.net + no + + + Aleksander Machniak + alec + alec@php.net + no + + 2017-04-06 + + 1.2.1 + 1.2.0 + + + stable + stable + + BSD-2-Clause + +* Fix BSD-2 licensing + + + + + + + + + + + + 5.4.0 + + + 1.10.1 + + + + + diff --git a/lib/composer/vendor/pear/net_socket/phpunit.xml.dist b/lib/composer/vendor/pear/net_socket/phpunit.xml.dist new file mode 100644 index 00000000..8eaaa2fe --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/phpunit.xml.dist @@ -0,0 +1,29 @@ + + + + + tests/ + + + + + + Net/ + + + + + + + + + diff --git a/lib/composer/vendor/pear/pear-core-minimal/README.rst b/lib/composer/vendor/pear/pear-core-minimal/README.rst new file mode 100644 index 00000000..9e412fbd --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/README.rst @@ -0,0 +1,26 @@ +****************************** +Minimal set of PEAR core files +****************************** + +This repository provides a set of files from ``pear-core`` +that are often used in PEAR packages. + +It follows the `pear-core`__ repository and gets updated whenever a new +PEAR version is released. + +It's meant to be used as dependency for composer packages. + +__ https://github.com/pear/pear-core + +============== +Included files +============== +- ``OS/Guess.php`` +- ``PEAR.php`` +- ``PEAR/Error.php`` +- ``PEAR/ErrorStack.php`` +- ``System.php`` + + +``PEAR/Error.php`` is a dummy file that only includes ``PEAR.php``, +to make autoloaders work without problems. diff --git a/lib/composer/vendor/pear/pear-core-minimal/composer.json b/lib/composer/vendor/pear/pear-core-minimal/composer.json new file mode 100644 index 00000000..d805f56a --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/composer.json @@ -0,0 +1,32 @@ +{ + "name": "pear/pear-core-minimal", + "description": "Minimal set of PEAR core files to be used as composer dependency", + "license": "BSD-3-Clause", + "authors": [ + { + "email": "cweiske@php.net", + "name": "Christian Weiske", + "role": "Lead" + } + ], + "autoload": { + "psr-0": { + "": "src/" + } + }, + "include-path": [ + "src/" + ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR", + "source": "https://github.com/pear/pear-core-minimal" + }, + "type": "library", + "require": { + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" + }, + "replace": { + "rsky/pear-core-min": "self.version" + } +} diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/OS/Guess.php b/lib/composer/vendor/pear/pear-core-minimal/src/OS/Guess.php new file mode 100644 index 00000000..c45e84f1 --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/OS/Guess.php @@ -0,0 +1,337 @@ + + * @author Gregory Beaver + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR + * @since File available since PEAR 0.1 + */ + +// {{{ uname examples + +// php_uname() without args returns the same as 'uname -a', or a PHP-custom +// string for Windows. +// PHP versions prior to 4.3 return the uname of the host where PHP was built, +// as of 4.3 it returns the uname of the host running the PHP code. +// +// PC RedHat Linux 7.1: +// Linux host.example.com 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686 unknown +// +// PC Debian Potato: +// Linux host 2.4.17 #2 SMP Tue Feb 12 15:10:04 CET 2002 i686 unknown +// +// PC FreeBSD 3.3: +// FreeBSD host.example.com 3.3-STABLE FreeBSD 3.3-STABLE #0: Mon Feb 21 00:42:31 CET 2000 root@example.com:/usr/src/sys/compile/CONFIG i386 +// +// PC FreeBSD 4.3: +// FreeBSD host.example.com 4.3-RELEASE FreeBSD 4.3-RELEASE #1: Mon Jun 25 11:19:43 EDT 2001 root@example.com:/usr/src/sys/compile/CONFIG i386 +// +// PC FreeBSD 4.5: +// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb 6 23:59:23 CET 2002 root@example.com:/usr/src/sys/compile/CONFIG i386 +// +// PC FreeBSD 4.5 w/uname from GNU shellutils: +// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb i386 unknown +// +// HP 9000/712 HP-UX 10: +// HP-UX iq B.10.10 A 9000/712 2008429113 two-user license +// +// HP 9000/712 HP-UX 10 w/uname from GNU shellutils: +// HP-UX host B.10.10 A 9000/712 unknown +// +// IBM RS6000/550 AIX 4.3: +// AIX host 3 4 000003531C00 +// +// AIX 4.3 w/uname from GNU shellutils: +// AIX host 3 4 000003531C00 unknown +// +// SGI Onyx IRIX 6.5 w/uname from GNU shellutils: +// IRIX64 host 6.5 01091820 IP19 mips +// +// SGI Onyx IRIX 6.5: +// IRIX64 host 6.5 01091820 IP19 +// +// SparcStation 20 Solaris 8 w/uname from GNU shellutils: +// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc +// +// SparcStation 20 Solaris 8: +// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc SUNW,SPARCstation-20 +// +// Mac OS X (Darwin) +// Darwin home-eden.local 7.5.0 Darwin Kernel Version 7.5.0: Thu Aug 5 19:26:16 PDT 2004; root:xnu/xnu-517.7.21.obj~3/RELEASE_PPC Power Macintosh +// +// Mac OS X early versions +// + +// }}} + +/* TODO: + * - define endianness, to allow matchSignature("bigend") etc. + */ + +/** + * Retrieves information about the current operating system + * + * This class uses php_uname() to grok information about the current OS + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Gregory Beaver + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/package/PEAR + * @since Class available since Release 0.1 + */ +class OS_Guess +{ + var $sysname; + var $nodename; + var $cpu; + var $release; + var $extra; + + function __construct($uname = null) + { + list($this->sysname, + $this->release, + $this->cpu, + $this->extra, + $this->nodename) = $this->parseSignature($uname); + } + + function parseSignature($uname = null) + { + static $sysmap = array( + 'HP-UX' => 'hpux', + 'IRIX64' => 'irix', + ); + static $cpumap = array( + 'i586' => 'i386', + 'i686' => 'i386', + 'ppc' => 'powerpc', + ); + if ($uname === null) { + $uname = php_uname(); + } + $parts = preg_split('/\s+/', trim($uname)); + $n = count($parts); + + $release = $machine = $cpu = ''; + $sysname = $parts[0]; + $nodename = $parts[1]; + $cpu = $parts[$n-1]; + $extra = ''; + if ($cpu == 'unknown') { + $cpu = $parts[$n - 2]; + } + + switch ($sysname) { + case 'AIX' : + $release = "$parts[3].$parts[2]"; + break; + case 'Windows' : + switch ($parts[1]) { + case '95/98': + $release = '9x'; + break; + default: + $release = $parts[1]; + break; + } + $cpu = 'i386'; + break; + case 'Linux' : + $extra = $this->_detectGlibcVersion(); + // use only the first two digits from the kernel version + $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]); + break; + case 'Mac' : + $sysname = 'darwin'; + $nodename = $parts[2]; + $release = $parts[3]; + if ($cpu == 'Macintosh') { + if ($parts[$n - 2] == 'Power') { + $cpu = 'powerpc'; + } + } + break; + case 'Darwin' : + if ($cpu == 'Macintosh') { + if ($parts[$n - 2] == 'Power') { + $cpu = 'powerpc'; + } + } + $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]); + break; + default: + $release = preg_replace('/-.*/', '', $parts[2]); + break; + } + + if (isset($sysmap[$sysname])) { + $sysname = $sysmap[$sysname]; + } else { + $sysname = strtolower($sysname); + } + if (isset($cpumap[$cpu])) { + $cpu = $cpumap[$cpu]; + } + return array($sysname, $release, $cpu, $extra, $nodename); + } + + function _detectGlibcVersion() + { + static $glibc = false; + if ($glibc !== false) { + return $glibc; // no need to run this multiple times + } + $major = $minor = 0; + include_once "System.php"; + // Use glibc's header file to + // get major and minor version number: + if (@file_exists('/usr/include/features.h') && + @is_readable('/usr/include/features.h')) { + if (!@file_exists('/usr/bin/cpp') || !@is_executable('/usr/bin/cpp')) { + $features_file = fopen('/usr/include/features.h', 'rb'); + while (!feof($features_file)) { + $line = fgets($features_file, 8192); + if (!$line || (strpos($line, '#define') === false)) { + continue; + } + if (strpos($line, '__GLIBC__')) { + // major version number #define __GLIBC__ version + $line = preg_split('/\s+/', $line); + $glibc_major = trim($line[2]); + if (isset($glibc_minor)) { + break; + } + continue; + } + + if (strpos($line, '__GLIBC_MINOR__')) { + // got the minor version number + // #define __GLIBC_MINOR__ version + $line = preg_split('/\s+/', $line); + $glibc_minor = trim($line[2]); + if (isset($glibc_major)) { + break; + } + continue; + } + } + fclose($features_file); + if (!isset($glibc_major) || !isset($glibc_minor)) { + return $glibc = ''; + } + return $glibc = 'glibc' . trim($glibc_major) . "." . trim($glibc_minor) ; + } // no cpp + + $tmpfile = System::mktemp("glibctest"); + $fp = fopen($tmpfile, "w"); + fwrite($fp, "#include \n__GLIBC__ __GLIBC_MINOR__\n"); + fclose($fp); + $cpp = popen("/usr/bin/cpp $tmpfile", "r"); + while ($line = fgets($cpp, 1024)) { + if ($line{0} == '#' || trim($line) == '') { + continue; + } + + if (list($major, $minor) = explode(' ', trim($line))) { + break; + } + } + pclose($cpp); + unlink($tmpfile); + } // features.h + + if (!($major && $minor) && @is_link('/lib/libc.so.6')) { + // Let's try reading the libc.so.6 symlink + if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) { + list($major, $minor) = explode('.', $matches[1]); + } + } + + if (!($major && $minor)) { + return $glibc = ''; + } + + return $glibc = "glibc{$major}.{$minor}"; + } + + function getSignature() + { + if (empty($this->extra)) { + return "{$this->sysname}-{$this->release}-{$this->cpu}"; + } + return "{$this->sysname}-{$this->release}-{$this->cpu}-{$this->extra}"; + } + + function getSysname() + { + return $this->sysname; + } + + function getNodename() + { + return $this->nodename; + } + + function getCpu() + { + return $this->cpu; + } + + function getRelease() + { + return $this->release; + } + + function getExtra() + { + return $this->extra; + } + + function matchSignature($match) + { + $fragments = is_array($match) ? $match : explode('-', $match); + $n = count($fragments); + $matches = 0; + if ($n > 0) { + $matches += $this->_matchFragment($fragments[0], $this->sysname); + } + if ($n > 1) { + $matches += $this->_matchFragment($fragments[1], $this->release); + } + if ($n > 2) { + $matches += $this->_matchFragment($fragments[2], $this->cpu); + } + if ($n > 3) { + $matches += $this->_matchFragment($fragments[3], $this->extra); + } + return ($matches == $n); + } + + function _matchFragment($fragment, $value) + { + if (strcspn($fragment, '*?') < strlen($fragment)) { + $reg = '/^' . str_replace(array('*', '?', '/'), array('.*', '.', '\\/'), $fragment) . '\\z/'; + return preg_match($reg, $value); + } + return ($fragment == '*' || !strcasecmp($fragment, $value)); + } + +} +/* + * Local Variables: + * indent-tabs-mode: nil + * c-basic-offset: 4 + * End: + */ diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/PEAR.php b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR.php new file mode 100644 index 00000000..b6bb191e --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR.php @@ -0,0 +1,1113 @@ + + * @author Stig Bakken + * @author Tomas V.V.Cox + * @author Greg Beaver + * @copyright 1997-2010 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR + * @since File available since Release 0.1 + */ + +/**#@+ + * ERROR constants + */ +define('PEAR_ERROR_RETURN', 1); +define('PEAR_ERROR_PRINT', 2); +define('PEAR_ERROR_TRIGGER', 4); +define('PEAR_ERROR_DIE', 8); +define('PEAR_ERROR_CALLBACK', 16); +/** + * WARNING: obsolete + * @deprecated + */ +define('PEAR_ERROR_EXCEPTION', 32); +/**#@-*/ + +if (substr(PHP_OS, 0, 3) == 'WIN') { + define('OS_WINDOWS', true); + define('OS_UNIX', false); + define('PEAR_OS', 'Windows'); +} else { + define('OS_WINDOWS', false); + define('OS_UNIX', true); + define('PEAR_OS', 'Unix'); // blatant assumption +} + +$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN; +$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE; +$GLOBALS['_PEAR_destructor_object_list'] = array(); +$GLOBALS['_PEAR_shutdown_funcs'] = array(); +$GLOBALS['_PEAR_error_handler_stack'] = array(); + +@ini_set('track_errors', true); + +/** + * Base class for other PEAR classes. Provides rudimentary + * emulation of destructors. + * + * If you want a destructor in your class, inherit PEAR and make a + * destructor method called _yourclassname (same name as the + * constructor, but with a "_" prefix). Also, in your constructor you + * have to call the PEAR constructor: $this->PEAR();. + * The destructor method will be called without parameters. Note that + * at in some SAPI implementations (such as Apache), any output during + * the request shutdown (in which destructors are called) seems to be + * discarded. If you need to get any debug information from your + * destructor, use error_log(), syslog() or something similar. + * + * IMPORTANT! To use the emulated destructors you need to create the + * objects by reference: $obj =& new PEAR_child; + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Tomas V.V. Cox + * @author Greg Beaver + * @copyright 1997-2006 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/package/PEAR + * @see PEAR_Error + * @since Class available since PHP 4.0.2 + * @link http://pear.php.net/manual/en/core.pear.php#core.pear.pear + */ +class PEAR +{ + /** + * Whether to enable internal debug messages. + * + * @var bool + * @access private + */ + var $_debug = false; + + /** + * Default error mode for this object. + * + * @var int + * @access private + */ + var $_default_error_mode = null; + + /** + * Default error options used for this object when error mode + * is PEAR_ERROR_TRIGGER. + * + * @var int + * @access private + */ + var $_default_error_options = null; + + /** + * Default error handler (callback) for this object, if error mode is + * PEAR_ERROR_CALLBACK. + * + * @var string + * @access private + */ + var $_default_error_handler = ''; + + /** + * Which class to use for error objects. + * + * @var string + * @access private + */ + var $_error_class = 'PEAR_Error'; + + /** + * An array of expected errors. + * + * @var array + * @access private + */ + var $_expected_errors = array(); + + /** + * List of methods that can be called both statically and non-statically. + * @var array + */ + protected static $bivalentMethods = array( + 'setErrorHandling' => true, + 'raiseError' => true, + 'throwError' => true, + 'pushErrorHandling' => true, + 'popErrorHandling' => true, + ); + + /** + * Constructor. Registers this object in + * $_PEAR_destructor_object_list for destructor emulation if a + * destructor object exists. + * + * @param string $error_class (optional) which class to use for + * error objects, defaults to PEAR_Error. + * @access public + * @return void + */ + function __construct($error_class = null) + { + $classname = strtolower(get_class($this)); + if ($this->_debug) { + print "PEAR constructor called, class=$classname\n"; + } + + if ($error_class !== null) { + $this->_error_class = $error_class; + } + + while ($classname && strcasecmp($classname, "pear")) { + $destructor = "_$classname"; + if (method_exists($this, $destructor)) { + global $_PEAR_destructor_object_list; + $_PEAR_destructor_object_list[] = &$this; + if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { + register_shutdown_function("_PEAR_call_destructors"); + $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; + } + break; + } else { + $classname = get_parent_class($classname); + } + } + } + + /** + * Only here for backwards compatibility. + * E.g. Archive_Tar calls $this->PEAR() in its constructor. + * + * @param string $error_class Which class to use for error objects, + * defaults to PEAR_Error. + */ + public function PEAR($error_class = null) + { + self::__construct($error_class); + } + + /** + * Destructor (the emulated type of...). Does nothing right now, + * but is included for forward compatibility, so subclass + * destructors should always call it. + * + * See the note in the class desciption about output from + * destructors. + * + * @access public + * @return void + */ + function _PEAR() { + if ($this->_debug) { + printf("PEAR destructor called, class=%s\n", strtolower(get_class($this))); + } + } + + public function __call($method, $arguments) + { + if (!isset(self::$bivalentMethods[$method])) { + trigger_error( + 'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR + ); + } + return call_user_func_array( + array(get_class(), '_' . $method), + array_merge(array($this), $arguments) + ); + } + + public static function __callStatic($method, $arguments) + { + if (!isset(self::$bivalentMethods[$method])) { + trigger_error( + 'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR + ); + } + return call_user_func_array( + array(get_class(), '_' . $method), + array_merge(array(null), $arguments) + ); + } + + /** + * If you have a class that's mostly/entirely static, and you need static + * properties, you can use this method to simulate them. Eg. in your method(s) + * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar'); + * You MUST use a reference, or they will not persist! + * + * @param string $class The calling classname, to prevent clashes + * @param string $var The variable to retrieve. + * @return mixed A reference to the variable. If not set it will be + * auto initialised to NULL. + */ + public static function &getStaticProperty($class, $var) + { + static $properties; + if (!isset($properties[$class])) { + $properties[$class] = array(); + } + + if (!array_key_exists($var, $properties[$class])) { + $properties[$class][$var] = null; + } + + return $properties[$class][$var]; + } + + /** + * Use this function to register a shutdown method for static + * classes. + * + * @param mixed $func The function name (or array of class/method) to call + * @param mixed $args The arguments to pass to the function + * + * @return void + */ + public static function registerShutdownFunc($func, $args = array()) + { + // if we are called statically, there is a potential + // that no shutdown func is registered. Bug #6445 + if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { + register_shutdown_function("_PEAR_call_destructors"); + $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; + } + $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args); + } + + /** + * Tell whether a value is a PEAR error. + * + * @param mixed $data the value to test + * @param int $code if $data is an error object, return true + * only if $code is a string and + * $obj->getMessage() == $code or + * $code is an integer and $obj->getCode() == $code + * + * @return bool true if parameter is an error + */ + public static function isError($data, $code = null) + { + if (!is_a($data, 'PEAR_Error')) { + return false; + } + + if (is_null($code)) { + return true; + } elseif (is_string($code)) { + return $data->getMessage() == $code; + } + + return $data->getCode() == $code; + } + + /** + * Sets how errors generated by this object should be handled. + * Can be invoked both in objects and statically. If called + * statically, setErrorHandling sets the default behaviour for all + * PEAR objects. If called in an object, setErrorHandling sets + * the default behaviour for that object. + * + * @param object $object + * Object the method was called on (non-static mode) + * + * @param int $mode + * One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION. + * + * @param mixed $options + * When $mode is PEAR_ERROR_TRIGGER, this is the error level (one + * of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * + * When $mode is PEAR_ERROR_CALLBACK, this parameter is expected + * to be the callback function or method. A callback + * function is a string with the name of the function, a + * callback method is an array of two elements: the element + * at index 0 is the object, and the element at index 1 is + * the name of the method to call in the object. + * + * When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is + * a printf format string used when printing the error + * message. + * + * @access public + * @return void + * @see PEAR_ERROR_RETURN + * @see PEAR_ERROR_PRINT + * @see PEAR_ERROR_TRIGGER + * @see PEAR_ERROR_DIE + * @see PEAR_ERROR_CALLBACK + * @see PEAR_ERROR_EXCEPTION + * + * @since PHP 4.0.5 + */ + protected static function _setErrorHandling( + $object, $mode = null, $options = null + ) { + if ($object !== null) { + $setmode = &$object->_default_error_mode; + $setoptions = &$object->_default_error_options; + } else { + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + } + + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + } + + /** + * This method is used to tell which errors you expect to get. + * Expected errors are always returned with error mode + * PEAR_ERROR_RETURN. Expected error codes are stored in a stack, + * and this method pushes a new element onto it. The list of + * expected errors are in effect until they are popped off the + * stack with the popExpect() method. + * + * Note that this method can not be called statically + * + * @param mixed $code a single error code or an array of error codes to expect + * + * @return int the new depth of the "expected errors" stack + * @access public + */ + function expectError($code = '*') + { + if (is_array($code)) { + array_push($this->_expected_errors, $code); + } else { + array_push($this->_expected_errors, array($code)); + } + return count($this->_expected_errors); + } + + /** + * This method pops one element off the expected error codes + * stack. + * + * @return array the list of error codes that were popped + */ + function popExpect() + { + return array_pop($this->_expected_errors); + } + + /** + * This method checks unsets an error code if available + * + * @param mixed error code + * @return bool true if the error code was unset, false otherwise + * @access private + * @since PHP 4.3.0 + */ + function _checkDelExpect($error_code) + { + $deleted = false; + foreach ($this->_expected_errors as $key => $error_array) { + if (in_array($error_code, $error_array)) { + unset($this->_expected_errors[$key][array_search($error_code, $error_array)]); + $deleted = true; + } + + // clean up empty arrays + if (0 == count($this->_expected_errors[$key])) { + unset($this->_expected_errors[$key]); + } + } + + return $deleted; + } + + /** + * This method deletes all occurrences of the specified element from + * the expected error codes stack. + * + * @param mixed $error_code error code that should be deleted + * @return mixed list of error codes that were deleted or error + * @access public + * @since PHP 4.3.0 + */ + function delExpect($error_code) + { + $deleted = false; + if ((is_array($error_code) && (0 != count($error_code)))) { + // $error_code is a non-empty array here; we walk through it trying + // to unset all values + foreach ($error_code as $key => $error) { + $deleted = $this->_checkDelExpect($error) ? true : false; + } + + return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } elseif (!empty($error_code)) { + // $error_code comes alone, trying to unset it + if ($this->_checkDelExpect($error_code)) { + return true; + } + + return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } + + // $error_code is empty + return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME + } + + /** + * This method is a wrapper that returns an instance of the + * configured error class with this object's default error + * handling applied. If the $mode and $options parameters are not + * specified, the object's defaults are used. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION. + * + * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter + * specifies the PHP-internal error level (one of + * E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * If $mode is PEAR_ERROR_CALLBACK, this + * parameter specifies the callback function or + * method. In other error modes this parameter + * is ignored. + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @param string $error_class The returned error object will be + * instantiated from this class, if specified. + * + * @param bool $skipmsg If true, raiseError will only pass error codes, + * the error message parameter will be dropped. + * + * @return object a PEAR error object + * @see PEAR::setErrorHandling + * @since PHP 4.0.5 + */ + protected static function _raiseError($object, + $message = null, + $code = null, + $mode = null, + $options = null, + $userinfo = null, + $error_class = null, + $skipmsg = false) + { + // The error is yet a PEAR error object + if (is_object($message)) { + $code = $message->getCode(); + $userinfo = $message->getUserInfo(); + $error_class = $message->getType(); + $message->error_message_prefix = ''; + $message = $message->getMessage(); + } + + if ( + $object !== null && + isset($object->_expected_errors) && + count($object->_expected_errors) > 0 && + count($exp = end($object->_expected_errors)) + ) { + if ($exp[0] == "*" || + (is_int(reset($exp)) && in_array($code, $exp)) || + (is_string(reset($exp)) && in_array($message, $exp)) + ) { + $mode = PEAR_ERROR_RETURN; + } + } + + // No mode given, try global ones + if ($mode === null) { + // Class error handler + if ($object !== null && isset($object->_default_error_mode)) { + $mode = $object->_default_error_mode; + $options = $object->_default_error_options; + // Global error handler + } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) { + $mode = $GLOBALS['_PEAR_default_error_mode']; + $options = $GLOBALS['_PEAR_default_error_options']; + } + } + + if ($error_class !== null) { + $ec = $error_class; + } elseif ($object !== null && isset($object->_error_class)) { + $ec = $object->_error_class; + } else { + $ec = 'PEAR_Error'; + } + + if ($skipmsg) { + $a = new $ec($code, $mode, $options, $userinfo); + } else { + $a = new $ec($message, $code, $mode, $options, $userinfo); + } + + return $a; + } + + /** + * Simpler form of raiseError with fewer options. In most cases + * message, code and userinfo are enough. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @return object a PEAR error object + * @see PEAR::raiseError + */ + protected static function _throwError($object, $message = null, $code = null, $userinfo = null) + { + if ($object !== null) { + $a = &$object->raiseError($message, $code, null, null, $userinfo); + return $a; + } + + $a = &PEAR::raiseError($message, $code, null, null, $userinfo); + return $a; + } + + public static function staticPushErrorHandling($mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + $stack[] = array($def_mode, $def_options); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $def_mode = $mode; + $def_options = $options; + break; + + case PEAR_ERROR_CALLBACK: + $def_mode = $mode; + // class/object method callback + if (is_callable($options)) { + $def_options = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + $stack[] = array($mode, $options); + return true; + } + + public static function staticPopErrorHandling() + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + return true; + } + + /** + * Push a new error handler on top of the error handler options stack. With this + * you can easily override the actual error handler for some code and restore + * it later with popErrorHandling. + * + * @param mixed $mode (same as setErrorHandling) + * @param mixed $options (same as setErrorHandling) + * + * @return bool Always true + * + * @see PEAR::setErrorHandling + */ + protected static function _pushErrorHandling($object, $mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + if ($object !== null) { + $def_mode = &$object->_default_error_mode; + $def_options = &$object->_default_error_options; + } else { + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + } + $stack[] = array($def_mode, $def_options); + + if ($object !== null) { + $object->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + $stack[] = array($mode, $options); + return true; + } + + /** + * Pop the last error handler used + * + * @return bool Always true + * + * @see PEAR::pushErrorHandling + */ + protected static function _popErrorHandling($object) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + if ($object !== null) { + $object->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + return true; + } + + /** + * OS independent PHP extension load. Remember to take care + * on the correct extension name for case sensitive OSes. + * + * @param string $ext The extension name + * @return bool Success or not on the dl() call + */ + public static function loadExtension($ext) + { + if (extension_loaded($ext)) { + return true; + } + + // if either returns true dl() will produce a FATAL error, stop that + if ( + function_exists('dl') === false || + ini_get('enable_dl') != 1 + ) { + return false; + } + + if (OS_WINDOWS) { + $suffix = '.dll'; + } elseif (PHP_OS == 'HP-UX') { + $suffix = '.sl'; + } elseif (PHP_OS == 'AIX') { + $suffix = '.a'; + } elseif (PHP_OS == 'OSX') { + $suffix = '.bundle'; + } else { + $suffix = '.so'; + } + + return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); + } +} + +function _PEAR_call_destructors() +{ + global $_PEAR_destructor_object_list; + if (is_array($_PEAR_destructor_object_list) && + sizeof($_PEAR_destructor_object_list)) + { + reset($_PEAR_destructor_object_list); + + $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo'); + + if ($destructLifoExists) { + $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list); + } + + while (list($k, $objref) = each($_PEAR_destructor_object_list)) { + $classname = get_class($objref); + while ($classname) { + $destructor = "_$classname"; + if (method_exists($objref, $destructor)) { + $objref->$destructor(); + break; + } else { + $classname = get_parent_class($classname); + } + } + } + // Empty the object list to ensure that destructors are + // not called more than once. + $_PEAR_destructor_object_list = array(); + } + + // Now call the shutdown functions + if ( + isset($GLOBALS['_PEAR_shutdown_funcs']) && + is_array($GLOBALS['_PEAR_shutdown_funcs']) && + !empty($GLOBALS['_PEAR_shutdown_funcs']) + ) { + foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) { + call_user_func_array($value[0], $value[1]); + } + } +} + +/** + * Standard PEAR error class for PHP 4 + * + * This class is supserseded by {@link PEAR_Exception} in PHP 5 + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Tomas V.V. Cox + * @author Gregory Beaver + * @copyright 1997-2006 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/manual/en/core.pear.pear-error.php + * @see PEAR::raiseError(), PEAR::throwError() + * @since Class available since PHP 4.0.2 + */ +class PEAR_Error +{ + var $error_message_prefix = ''; + var $mode = PEAR_ERROR_RETURN; + var $level = E_USER_NOTICE; + var $code = -1; + var $message = ''; + var $userinfo = ''; + var $backtrace = null; + + /** + * PEAR_Error constructor + * + * @param string $message message + * + * @param int $code (optional) error code + * + * @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN, + * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION + * + * @param mixed $options (optional) error level, _OR_ in the case of + * PEAR_ERROR_CALLBACK, the callback function or object/method + * tuple. + * + * @param string $userinfo (optional) additional user/debug info + * + * @access public + * + */ + function __construct($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + if ($mode === null) { + $mode = PEAR_ERROR_RETURN; + } + $this->message = $message; + $this->code = $code; + $this->mode = $mode; + $this->userinfo = $userinfo; + + $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace'); + + if (!$skiptrace) { + $this->backtrace = debug_backtrace(); + if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) { + unset($this->backtrace[0]['object']); + } + } + + if ($mode & PEAR_ERROR_CALLBACK) { + $this->level = E_USER_NOTICE; + $this->callback = $options; + } else { + if ($options === null) { + $options = E_USER_NOTICE; + } + + $this->level = $options; + $this->callback = null; + } + + if ($this->mode & PEAR_ERROR_PRINT) { + if (is_null($options) || is_int($options)) { + $format = "%s"; + } else { + $format = $options; + } + + printf($format, $this->getMessage()); + } + + if ($this->mode & PEAR_ERROR_TRIGGER) { + trigger_error($this->getMessage(), $this->level); + } + + if ($this->mode & PEAR_ERROR_DIE) { + $msg = $this->getMessage(); + if (is_null($options) || is_int($options)) { + $format = "%s"; + if (substr($msg, -1) != "\n") { + $msg .= "\n"; + } + } else { + $format = $options; + } + printf($format, $msg); + exit($code); + } + + if ($this->mode & PEAR_ERROR_CALLBACK && is_callable($this->callback)) { + call_user_func($this->callback, $this); + } + + if ($this->mode & PEAR_ERROR_EXCEPTION) { + trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING); + eval('$e = new Exception($this->message, $this->code);throw($e);'); + } + } + + /** + * Only here for backwards compatibility. + * + * Class "Cache_Error" still uses it, among others. + * + * @param string $message Message + * @param int $code Error code + * @param int $mode Error mode + * @param mixed $options See __construct() + * @param string $userinfo Additional user/debug info + */ + public function PEAR_Error( + $message = 'unknown error', $code = null, $mode = null, + $options = null, $userinfo = null + ) { + self::__construct($message, $code, $mode, $options, $userinfo); + } + + /** + * Get the error mode from an error object. + * + * @return int error mode + * @access public + */ + function getMode() + { + return $this->mode; + } + + /** + * Get the callback function/method from an error object. + * + * @return mixed callback function or object/method array + * @access public + */ + function getCallback() + { + return $this->callback; + } + + /** + * Get the error message from an error object. + * + * @return string full error message + * @access public + */ + function getMessage() + { + return ($this->error_message_prefix . $this->message); + } + + /** + * Get error code from an error object + * + * @return int error code + * @access public + */ + function getCode() + { + return $this->code; + } + + /** + * Get the name of this error/exception. + * + * @return string error/exception name (type) + * @access public + */ + function getType() + { + return get_class($this); + } + + /** + * Get additional user-supplied information. + * + * @return string user-supplied information + * @access public + */ + function getUserInfo() + { + return $this->userinfo; + } + + /** + * Get additional debug information supplied by the application. + * + * @return string debug information + * @access public + */ + function getDebugInfo() + { + return $this->getUserInfo(); + } + + /** + * Get the call backtrace from where the error was generated. + * Supported with PHP 4.3.0 or newer. + * + * @param int $frame (optional) what frame to fetch + * @return array Backtrace, or NULL if not available. + * @access public + */ + function getBacktrace($frame = null) + { + if (defined('PEAR_IGNORE_BACKTRACE')) { + return null; + } + if ($frame === null) { + return $this->backtrace; + } + return $this->backtrace[$frame]; + } + + function addUserInfo($info) + { + if (empty($this->userinfo)) { + $this->userinfo = $info; + } else { + $this->userinfo .= " ** $info"; + } + } + + function __toString() + { + return $this->getMessage(); + } + + /** + * Make a string representation of this object. + * + * @return string a string with an object summary + * @access public + */ + function toString() + { + $modes = array(); + $levels = array(E_USER_NOTICE => 'notice', + E_USER_WARNING => 'warning', + E_USER_ERROR => 'error'); + if ($this->mode & PEAR_ERROR_CALLBACK) { + if (is_array($this->callback)) { + $callback = (is_object($this->callback[0]) ? + strtolower(get_class($this->callback[0])) : + $this->callback[0]) . '::' . + $this->callback[1]; + } else { + $callback = $this->callback; + } + return sprintf('[%s: message="%s" code=%d mode=callback '. + 'callback=%s prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + $callback, $this->error_message_prefix, + $this->userinfo); + } + if ($this->mode & PEAR_ERROR_PRINT) { + $modes[] = 'print'; + } + if ($this->mode & PEAR_ERROR_TRIGGER) { + $modes[] = 'trigger'; + } + if ($this->mode & PEAR_ERROR_DIE) { + $modes[] = 'die'; + } + if ($this->mode & PEAR_ERROR_RETURN) { + $modes[] = 'return'; + } + return sprintf('[%s: message="%s" code=%d mode=%s level=%s '. + 'prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + implode("|", $modes), $levels[$this->level], + $this->error_message_prefix, + $this->userinfo); + } +} + +/* + * Local Variables: + * mode: php + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/Error.php b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/Error.php new file mode 100644 index 00000000..96efff75 --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/Error.php @@ -0,0 +1,14 @@ + + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR + */ +require_once __DIR__ . '/../PEAR.php'; +?> \ No newline at end of file diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php new file mode 100644 index 00000000..7af45bfa --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php @@ -0,0 +1,979 @@ + + * @copyright 2004-2008 Greg Beaver + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR_ErrorStack + */ + +/** + * Singleton storage + * + * Format: + *
+ * array(
+ *  'package1' => PEAR_ErrorStack object,
+ *  'package2' => PEAR_ErrorStack object,
+ *  ...
+ * )
+ * 
+ * @access private + * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] + */ +$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array(); + +/** + * Global error callback (default) + * + * This is only used if set to non-false. * is the default callback for + * all packages, whereas specific packages may set a default callback + * for all instances, regardless of whether they are a singleton or not. + * + * To exclude non-singletons, only set the local callback for the singleton + * @see PEAR_ErrorStack::setDefaultCallback() + * @access private + * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] + */ +$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = array( + '*' => false, +); + +/** + * Global Log object (default) + * + * This is only used if set to non-false. Use to set a default log object for + * all stacks, regardless of instantiation order or location + * @see PEAR_ErrorStack::setDefaultLogger() + * @access private + * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] + */ +$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false; + +/** + * Global Overriding Callback + * + * This callback will override any error callbacks that specific loggers have set. + * Use with EXTREME caution + * @see PEAR_ErrorStack::staticPushCallback() + * @access private + * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] + */ +$GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array(); + +/**#@+ + * One of four possible return values from the error Callback + * @see PEAR_ErrorStack::_errorCallback() + */ +/** + * If this is returned, then the error will be both pushed onto the stack + * and logged. + */ +define('PEAR_ERRORSTACK_PUSHANDLOG', 1); +/** + * If this is returned, then the error will only be pushed onto the stack, + * and not logged. + */ +define('PEAR_ERRORSTACK_PUSH', 2); +/** + * If this is returned, then the error will only be logged, but not pushed + * onto the error stack. + */ +define('PEAR_ERRORSTACK_LOG', 3); +/** + * If this is returned, then the error is completely ignored. + */ +define('PEAR_ERRORSTACK_IGNORE', 4); +/** + * If this is returned, then the error is logged and die() is called. + */ +define('PEAR_ERRORSTACK_DIE', 5); +/**#@-*/ + +/** + * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in + * the singleton method. + */ +define('PEAR_ERRORSTACK_ERR_NONCLASS', 1); + +/** + * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()} + * that has no __toString() method + */ +define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2); +/** + * Error Stack Implementation + * + * Usage: + * + * // global error stack + * $global_stack = &PEAR_ErrorStack::singleton('MyPackage'); + * // local error stack + * $local_stack = new PEAR_ErrorStack('MyPackage'); + * + * @author Greg Beaver + * @version @package_version@ + * @package PEAR_ErrorStack + * @category Debugging + * @copyright 2004-2008 Greg Beaver + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR_ErrorStack + */ +class PEAR_ErrorStack { + /** + * Errors are stored in the order that they are pushed on the stack. + * @since 0.4alpha Errors are no longer organized by error level. + * This renders pop() nearly unusable, and levels could be more easily + * handled in a callback anyway + * @var array + * @access private + */ + var $_errors = array(); + + /** + * Storage of errors by level. + * + * Allows easy retrieval and deletion of only errors from a particular level + * @since PEAR 1.4.0dev + * @var array + * @access private + */ + var $_errorsByLevel = array(); + + /** + * Package name this error stack represents + * @var string + * @access protected + */ + var $_package; + + /** + * Determines whether a PEAR_Error is thrown upon every error addition + * @var boolean + * @access private + */ + var $_compat = false; + + /** + * If set to a valid callback, this will be used to generate the error + * message from the error code, otherwise the message passed in will be + * used + * @var false|string|array + * @access private + */ + var $_msgCallback = false; + + /** + * If set to a valid callback, this will be used to generate the error + * context for an error. For PHP-related errors, this will be a file + * and line number as retrieved from debug_backtrace(), but can be + * customized for other purposes. The error might actually be in a separate + * configuration file, or in a database query. + * @var false|string|array + * @access protected + */ + var $_contextCallback = false; + + /** + * If set to a valid callback, this will be called every time an error + * is pushed onto the stack. The return value will be used to determine + * whether to allow an error to be pushed or logged. + * + * The return value must be one an PEAR_ERRORSTACK_* constant + * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG + * @var false|string|array + * @access protected + */ + var $_errorCallback = array(); + + /** + * PEAR::Log object for logging errors + * @var false|Log + * @access protected + */ + var $_logger = false; + + /** + * Error messages - designed to be overridden + * @var array + * @abstract + */ + var $_errorMsgs = array(); + + /** + * Set up a new error stack + * + * @param string $package name of the package this error stack represents + * @param callback $msgCallback callback used for error message generation + * @param callback $contextCallback callback used for context generation, + * defaults to {@link getFileLine()} + * @param boolean $throwPEAR_Error + */ + function __construct($package, $msgCallback = false, $contextCallback = false, + $throwPEAR_Error = false) + { + $this->_package = $package; + $this->setMessageCallback($msgCallback); + $this->setContextCallback($contextCallback); + $this->_compat = $throwPEAR_Error; + } + + /** + * Return a single error stack for this package. + * + * Note that all parameters are ignored if the stack for package $package + * has already been instantiated + * @param string $package name of the package this error stack represents + * @param callback $msgCallback callback used for error message generation + * @param callback $contextCallback callback used for context generation, + * defaults to {@link getFileLine()} + * @param boolean $throwPEAR_Error + * @param string $stackClass class to instantiate + * + * @return PEAR_ErrorStack + */ + public static function &singleton( + $package, $msgCallback = false, $contextCallback = false, + $throwPEAR_Error = false, $stackClass = 'PEAR_ErrorStack' + ) { + if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) { + return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]; + } + if (!class_exists($stackClass)) { + if (function_exists('debug_backtrace')) { + $trace = debug_backtrace(); + } + PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS, + 'exception', array('stackclass' => $stackClass), + 'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)', + false, $trace); + } + $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] = + new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error); + + return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]; + } + + /** + * Internal error handler for PEAR_ErrorStack class + * + * Dies if the error is an exception (and would have died anyway) + * @access private + */ + function _handleError($err) + { + if ($err['level'] == 'exception') { + $message = $err['message']; + if (isset($_SERVER['REQUEST_URI'])) { + echo '
'; + } else { + echo "\n"; + } + var_dump($err['context']); + die($message); + } + } + + /** + * Set up a PEAR::Log object for all error stacks that don't have one + * @param Log $log + */ + public static function setDefaultLogger(&$log) + { + if (is_object($log) && method_exists($log, 'log') ) { + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log; + } elseif (is_callable($log)) { + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log; + } + } + + /** + * Set up a PEAR::Log object for this error stack + * @param Log $log + */ + function setLogger(&$log) + { + if (is_object($log) && method_exists($log, 'log') ) { + $this->_logger = &$log; + } elseif (is_callable($log)) { + $this->_logger = &$log; + } + } + + /** + * Set an error code => error message mapping callback + * + * This method sets the callback that can be used to generate error + * messages for any instance + * @param array|string Callback function/method + */ + function setMessageCallback($msgCallback) + { + if (!$msgCallback) { + $this->_msgCallback = array(&$this, 'getErrorMessage'); + } else { + if (is_callable($msgCallback)) { + $this->_msgCallback = $msgCallback; + } + } + } + + /** + * Get an error code => error message mapping callback + * + * This method returns the current callback that can be used to generate error + * messages + * @return array|string|false Callback function/method or false if none + */ + function getMessageCallback() + { + return $this->_msgCallback; + } + + /** + * Sets a default callback to be used by all error stacks + * + * This method sets the callback that can be used to generate error + * messages for a singleton + * @param array|string Callback function/method + * @param string Package name, or false for all packages + */ + public static function setDefaultCallback($callback = false, $package = false) + { + if (!is_callable($callback)) { + $callback = false; + } + $package = $package ? $package : '*'; + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$package] = $callback; + } + + /** + * Set a callback that generates context information (location of error) for an error stack + * + * This method sets the callback that can be used to generate context + * information for an error. Passing in NULL will disable context generation + * and remove the expensive call to debug_backtrace() + * @param array|string|null Callback function/method + */ + function setContextCallback($contextCallback) + { + if ($contextCallback === null) { + return $this->_contextCallback = false; + } + if (!$contextCallback) { + $this->_contextCallback = array(&$this, 'getFileLine'); + } else { + if (is_callable($contextCallback)) { + $this->_contextCallback = $contextCallback; + } + } + } + + /** + * Set an error Callback + * If set to a valid callback, this will be called every time an error + * is pushed onto the stack. The return value will be used to determine + * whether to allow an error to be pushed or logged. + * + * The return value must be one of the ERRORSTACK_* constants. + * + * This functionality can be used to emulate PEAR's pushErrorHandling, and + * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of + * the error stack or logging + * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG + * @see popCallback() + * @param string|array $cb + */ + function pushCallback($cb) + { + array_push($this->_errorCallback, $cb); + } + + /** + * Remove a callback from the error callback stack + * @see pushCallback() + * @return array|string|false + */ + function popCallback() + { + if (!count($this->_errorCallback)) { + return false; + } + return array_pop($this->_errorCallback); + } + + /** + * Set a temporary overriding error callback for every package error stack + * + * Use this to temporarily disable all existing callbacks (can be used + * to emulate the @ operator, for instance) + * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG + * @see staticPopCallback(), pushCallback() + * @param string|array $cb + */ + public static function staticPushCallback($cb) + { + array_push($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'], $cb); + } + + /** + * Remove a temporary overriding error callback + * @see staticPushCallback() + * @return array|string|false + */ + public static function staticPopCallback() + { + $ret = array_pop($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK']); + if (!is_array($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'])) { + $GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array(); + } + return $ret; + } + + /** + * Add an error to the stack + * + * If the message generator exists, it is called with 2 parameters. + * - the current Error Stack object + * - an array that is in the same format as an error. Available indices + * are 'code', 'package', 'time', 'params', 'level', and 'context' + * + * Next, if the error should contain context information, this is + * handled by the context grabbing method. + * Finally, the error is pushed onto the proper error stack + * @param int $code Package-specific error code + * @param string $level Error level. This is NOT spell-checked + * @param array $params associative array of error parameters + * @param string $msg Error message, or a portion of it if the message + * is to be generated + * @param array $repackage If this error re-packages an error pushed by + * another package, place the array returned from + * {@link pop()} in this parameter + * @param array $backtrace Protected parameter: use this to pass in the + * {@link debug_backtrace()} that should be used + * to find error context + * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also + * thrown. If a PEAR_Error is returned, the userinfo + * property is set to the following array: + * + * + * array( + * 'code' => $code, + * 'params' => $params, + * 'package' => $this->_package, + * 'level' => $level, + * 'time' => time(), + * 'context' => $context, + * 'message' => $msg, + * //['repackage' => $err] repackaged error array/Exception class + * ); + * + * + * Normally, the previous array is returned. + */ + function push($code, $level = 'error', $params = array(), $msg = false, + $repackage = false, $backtrace = false) + { + $context = false; + // grab error context + if ($this->_contextCallback) { + if (!$backtrace) { + $backtrace = debug_backtrace(); + } + $context = call_user_func($this->_contextCallback, $code, $params, $backtrace); + } + + // save error + $time = explode(' ', microtime()); + $time = $time[1] + $time[0]; + $err = array( + 'code' => $code, + 'params' => $params, + 'package' => $this->_package, + 'level' => $level, + 'time' => $time, + 'context' => $context, + 'message' => $msg, + ); + + if ($repackage) { + $err['repackage'] = $repackage; + } + + // set up the error message, if necessary + if ($this->_msgCallback) { + $msg = call_user_func_array($this->_msgCallback, + array(&$this, $err)); + $err['message'] = $msg; + } + $push = $log = true; + $die = false; + // try the overriding callback first + $callback = $this->staticPopCallback(); + if ($callback) { + $this->staticPushCallback($callback); + } + if (!is_callable($callback)) { + // try the local callback next + $callback = $this->popCallback(); + if (is_callable($callback)) { + $this->pushCallback($callback); + } else { + // try the default callback + $callback = isset($GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package]) ? + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package] : + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']['*']; + } + } + if (is_callable($callback)) { + switch(call_user_func($callback, $err)){ + case PEAR_ERRORSTACK_IGNORE: + return $err; + break; + case PEAR_ERRORSTACK_PUSH: + $log = false; + break; + case PEAR_ERRORSTACK_LOG: + $push = false; + break; + case PEAR_ERRORSTACK_DIE: + $die = true; + break; + // anything else returned has the same effect as pushandlog + } + } + if ($push) { + array_unshift($this->_errors, $err); + if (!isset($this->_errorsByLevel[$err['level']])) { + $this->_errorsByLevel[$err['level']] = array(); + } + $this->_errorsByLevel[$err['level']][] = &$this->_errors[0]; + } + if ($log) { + if ($this->_logger || $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']) { + $this->_log($err); + } + } + if ($die) { + die(); + } + if ($this->_compat && $push) { + return $this->raiseError($msg, $code, null, null, $err); + } + return $err; + } + + /** + * Static version of {@link push()} + * + * @param string $package Package name this error belongs to + * @param int $code Package-specific error code + * @param string $level Error level. This is NOT spell-checked + * @param array $params associative array of error parameters + * @param string $msg Error message, or a portion of it if the message + * is to be generated + * @param array $repackage If this error re-packages an error pushed by + * another package, place the array returned from + * {@link pop()} in this parameter + * @param array $backtrace Protected parameter: use this to pass in the + * {@link debug_backtrace()} that should be used + * to find error context + * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also + * thrown. see docs for {@link push()} + */ + public static function staticPush( + $package, $code, $level = 'error', $params = array(), + $msg = false, $repackage = false, $backtrace = false + ) { + $s = &PEAR_ErrorStack::singleton($package); + if ($s->_contextCallback) { + if (!$backtrace) { + if (function_exists('debug_backtrace')) { + $backtrace = debug_backtrace(); + } + } + } + return $s->push($code, $level, $params, $msg, $repackage, $backtrace); + } + + /** + * Log an error using PEAR::Log + * @param array $err Error array + * @param array $levels Error level => Log constant map + * @access protected + */ + function _log($err) + { + if ($this->_logger) { + $logger = &$this->_logger; + } else { + $logger = &$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']; + } + if (is_a($logger, 'Log')) { + $levels = array( + 'exception' => PEAR_LOG_CRIT, + 'alert' => PEAR_LOG_ALERT, + 'critical' => PEAR_LOG_CRIT, + 'error' => PEAR_LOG_ERR, + 'warning' => PEAR_LOG_WARNING, + 'notice' => PEAR_LOG_NOTICE, + 'info' => PEAR_LOG_INFO, + 'debug' => PEAR_LOG_DEBUG); + if (isset($levels[$err['level']])) { + $level = $levels[$err['level']]; + } else { + $level = PEAR_LOG_INFO; + } + $logger->log($err['message'], $level, $err); + } else { // support non-standard logs + call_user_func($logger, $err); + } + } + + + /** + * Pop an error off of the error stack + * + * @return false|array + * @since 0.4alpha it is no longer possible to specify a specific error + * level to return - the last error pushed will be returned, instead + */ + function pop() + { + $err = @array_shift($this->_errors); + if (!is_null($err)) { + @array_pop($this->_errorsByLevel[$err['level']]); + if (!count($this->_errorsByLevel[$err['level']])) { + unset($this->_errorsByLevel[$err['level']]); + } + } + return $err; + } + + /** + * Pop an error off of the error stack, static method + * + * @param string package name + * @return boolean + * @since PEAR1.5.0a1 + */ + function staticPop($package) + { + if ($package) { + if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) { + return false; + } + return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pop(); + } + } + + /** + * Determine whether there are any errors on the stack + * @param string|array Level name. Use to determine if any errors + * of level (string), or levels (array) have been pushed + * @return boolean + */ + function hasErrors($level = false) + { + if ($level) { + return isset($this->_errorsByLevel[$level]); + } + return count($this->_errors); + } + + /** + * Retrieve all errors since last purge + * + * @param boolean set in order to empty the error stack + * @param string level name, to return only errors of a particular severity + * @return array + */ + function getErrors($purge = false, $level = false) + { + if (!$purge) { + if ($level) { + if (!isset($this->_errorsByLevel[$level])) { + return array(); + } else { + return $this->_errorsByLevel[$level]; + } + } else { + return $this->_errors; + } + } + if ($level) { + $ret = $this->_errorsByLevel[$level]; + foreach ($this->_errorsByLevel[$level] as $i => $unused) { + // entries are references to the $_errors array + $this->_errorsByLevel[$level][$i] = false; + } + // array_filter removes all entries === false + $this->_errors = array_filter($this->_errors); + unset($this->_errorsByLevel[$level]); + return $ret; + } + $ret = $this->_errors; + $this->_errors = array(); + $this->_errorsByLevel = array(); + return $ret; + } + + /** + * Determine whether there are any errors on a single error stack, or on any error stack + * + * The optional parameter can be used to test the existence of any errors without the need of + * singleton instantiation + * @param string|false Package name to check for errors + * @param string Level name to check for a particular severity + * @return boolean + */ + public static function staticHasErrors($package = false, $level = false) + { + if ($package) { + if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) { + return false; + } + return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->hasErrors($level); + } + foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) { + if ($obj->hasErrors($level)) { + return true; + } + } + return false; + } + + /** + * Get a list of all errors since last purge, organized by package + * @since PEAR 1.4.0dev BC break! $level is now in the place $merge used to be + * @param boolean $purge Set to purge the error stack of existing errors + * @param string $level Set to a level name in order to retrieve only errors of a particular level + * @param boolean $merge Set to return a flat array, not organized by package + * @param array $sortfunc Function used to sort a merged array - default + * sorts by time, and should be good for most cases + * + * @return array + */ + public static function staticGetErrors( + $purge = false, $level = false, $merge = false, + $sortfunc = array('PEAR_ErrorStack', '_sortErrors') + ) { + $ret = array(); + if (!is_callable($sortfunc)) { + $sortfunc = array('PEAR_ErrorStack', '_sortErrors'); + } + foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) { + $test = $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->getErrors($purge, $level); + if ($test) { + if ($merge) { + $ret = array_merge($ret, $test); + } else { + $ret[$package] = $test; + } + } + } + if ($merge) { + usort($ret, $sortfunc); + } + return $ret; + } + + /** + * Error sorting function, sorts by time + * @access private + */ + public static function _sortErrors($a, $b) + { + if ($a['time'] == $b['time']) { + return 0; + } + if ($a['time'] < $b['time']) { + return 1; + } + return -1; + } + + /** + * Standard file/line number/function/class context callback + * + * This function uses a backtrace generated from {@link debug_backtrace()} + * and so will not work at all in PHP < 4.3.0. The frame should + * reference the frame that contains the source of the error. + * @return array|false either array('file' => file, 'line' => line, + * 'function' => function name, 'class' => class name) or + * if this doesn't work, then false + * @param unused + * @param integer backtrace frame. + * @param array Results of debug_backtrace() + */ + public static function getFileLine($code, $params, $backtrace = null) + { + if ($backtrace === null) { + return false; + } + $frame = 0; + $functionframe = 1; + if (!isset($backtrace[1])) { + $functionframe = 0; + } else { + while (isset($backtrace[$functionframe]['function']) && + $backtrace[$functionframe]['function'] == 'eval' && + isset($backtrace[$functionframe + 1])) { + $functionframe++; + } + } + if (isset($backtrace[$frame])) { + if (!isset($backtrace[$frame]['file'])) { + $frame++; + } + $funcbacktrace = $backtrace[$functionframe]; + $filebacktrace = $backtrace[$frame]; + $ret = array('file' => $filebacktrace['file'], + 'line' => $filebacktrace['line']); + // rearrange for eval'd code or create function errors + if (strpos($filebacktrace['file'], '(') && + preg_match(';^(.*?)\((\d+)\) : (.*?)\\z;', $filebacktrace['file'], + $matches)) { + $ret['file'] = $matches[1]; + $ret['line'] = $matches[2] + 0; + } + if (isset($funcbacktrace['function']) && isset($backtrace[1])) { + if ($funcbacktrace['function'] != 'eval') { + if ($funcbacktrace['function'] == '__lambda_func') { + $ret['function'] = 'create_function() code'; + } else { + $ret['function'] = $funcbacktrace['function']; + } + } + } + if (isset($funcbacktrace['class']) && isset($backtrace[1])) { + $ret['class'] = $funcbacktrace['class']; + } + return $ret; + } + return false; + } + + /** + * Standard error message generation callback + * + * This method may also be called by a custom error message generator + * to fill in template values from the params array, simply + * set the third parameter to the error message template string to use + * + * The special variable %__msg% is reserved: use it only to specify + * where a message passed in by the user should be placed in the template, + * like so: + * + * Error message: %msg% - internal error + * + * If the message passed like so: + * + * + * $stack->push(ERROR_CODE, 'error', array(), 'server error 500'); + * + * + * The returned error message will be "Error message: server error 500 - + * internal error" + * @param PEAR_ErrorStack + * @param array + * @param string|false Pre-generated error message template + * + * @return string + */ + public static function getErrorMessage(&$stack, $err, $template = false) + { + if ($template) { + $mainmsg = $template; + } else { + $mainmsg = $stack->getErrorMessageTemplate($err['code']); + } + $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg); + if (is_array($err['params']) && count($err['params'])) { + foreach ($err['params'] as $name => $val) { + if (is_array($val)) { + // @ is needed in case $val is a multi-dimensional array + $val = @implode(', ', $val); + } + if (is_object($val)) { + if (method_exists($val, '__toString')) { + $val = $val->__toString(); + } else { + PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_OBJTOSTRING, + 'warning', array('obj' => get_class($val)), + 'object %obj% passed into getErrorMessage, but has no __toString() method'); + $val = 'Object'; + } + } + $mainmsg = str_replace('%' . $name . '%', $val, $mainmsg); + } + } + return $mainmsg; + } + + /** + * Standard Error Message Template generator from code + * @return string + */ + function getErrorMessageTemplate($code) + { + if (!isset($this->_errorMsgs[$code])) { + return '%__msg%'; + } + return $this->_errorMsgs[$code]; + } + + /** + * Set the Error Message Template array + * + * The array format must be: + *
+     * array(error code => 'message template',...)
+     * 
+ * + * Error message parameters passed into {@link push()} will be used as input + * for the error message. If the template is 'message %foo% was %bar%', and the + * parameters are array('foo' => 'one', 'bar' => 'six'), the error message returned will + * be 'message one was six' + * @return string + */ + function setErrorMessageTemplate($template) + { + $this->_errorMsgs = $template; + } + + + /** + * emulate PEAR::raiseError() + * + * @return PEAR_Error + */ + function raiseError() + { + require_once 'PEAR.php'; + $args = func_get_args(); + return call_user_func_array(array('PEAR', 'raiseError'), $args); + } +} +$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack'); +$stack->pushCallback(array('PEAR_ErrorStack', '_handleError')); +?> diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/System.php b/lib/composer/vendor/pear/pear-core-minimal/src/System.php new file mode 100644 index 00000000..89c53e3c --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/System.php @@ -0,0 +1,622 @@ + + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR + * @since File available since Release 0.1 + */ + +/** + * base class + */ +require_once 'PEAR.php'; +require_once 'Console/Getopt.php'; + +$GLOBALS['_System_temp_files'] = array(); + +/** +* System offers cross platform compatible system functions +* +* Static functions for different operations. Should work under +* Unix and Windows. The names and usage has been taken from its respectively +* GNU commands. The functions will return (bool) false on error and will +* trigger the error with the PHP trigger_error() function (you can silence +* the error by prefixing a '@' sign after the function call, but this +* is not recommended practice. Instead use an error handler with +* {@link set_error_handler()}). +* +* Documentation on this class you can find in: +* http://pear.php.net/manual/ +* +* Example usage: +* if (!@System::rm('-r file1 dir1')) { +* print "could not delete file1 or dir1"; +* } +* +* In case you need to to pass file names with spaces, +* pass the params as an array: +* +* System::rm(array('-r', $file1, $dir1)); +* +* @category pear +* @package System +* @author Tomas V.V. Cox +* @copyright 1997-2006 The PHP Group +* @license http://opensource.org/licenses/bsd-license.php New BSD License +* @version Release: @package_version@ +* @link http://pear.php.net/package/PEAR +* @since Class available since Release 0.1 +* @static +*/ +class System +{ + /** + * returns the commandline arguments of a function + * + * @param string $argv the commandline + * @param string $short_options the allowed option short-tags + * @param string $long_options the allowed option long-tags + * @return array the given options and there values + */ + public static function _parseArgs($argv, $short_options, $long_options = null) + { + if (!is_array($argv) && $argv !== null) { + /* + // Quote all items that are a short option + $av = preg_split('/(\A| )--?[a-z0-9]+[ =]?((? $a) { + if (empty($a)) { + continue; + } + $argv[$k] = trim($a) ; + } + } + + return Console_Getopt::getopt2($argv, $short_options, $long_options); + } + + /** + * Output errors with PHP trigger_error(). You can silence the errors + * with prefixing a "@" sign to the function call: @System::mkdir(..); + * + * @param mixed $error a PEAR error or a string with the error message + * @return bool false + */ + protected static function raiseError($error) + { + if (PEAR::isError($error)) { + $error = $error->getMessage(); + } + trigger_error($error, E_USER_WARNING); + return false; + } + + /** + * Creates a nested array representing the structure of a directory + * + * System::_dirToStruct('dir1', 0) => + * Array + * ( + * [dirs] => Array + * ( + * [0] => dir1 + * ) + * + * [files] => Array + * ( + * [0] => dir1/file2 + * [1] => dir1/file3 + * ) + * ) + * @param string $sPath Name of the directory + * @param integer $maxinst max. deep of the lookup + * @param integer $aktinst starting deep of the lookup + * @param bool $silent if true, do not emit errors. + * @return array the structure of the dir + */ + protected static function _dirToStruct($sPath, $maxinst, $aktinst = 0, $silent = false) + { + $struct = array('dirs' => array(), 'files' => array()); + if (($dir = @opendir($sPath)) === false) { + if (!$silent) { + System::raiseError("Could not open dir $sPath"); + } + return $struct; // XXX could not open error + } + + $struct['dirs'][] = $sPath = realpath($sPath); // XXX don't add if '.' or '..' ? + $list = array(); + while (false !== ($file = readdir($dir))) { + if ($file != '.' && $file != '..') { + $list[] = $file; + } + } + + closedir($dir); + natsort($list); + if ($aktinst < $maxinst || $maxinst == 0) { + foreach ($list as $val) { + $path = $sPath . DIRECTORY_SEPARATOR . $val; + if (is_dir($path) && !is_link($path)) { + $tmp = System::_dirToStruct($path, $maxinst, $aktinst+1, $silent); + $struct = array_merge_recursive($struct, $tmp); + } else { + $struct['files'][] = $path; + } + } + } + + return $struct; + } + + /** + * Creates a nested array representing the structure of a directory and files + * + * @param array $files Array listing files and dirs + * @return array + * @static + * @see System::_dirToStruct() + */ + protected static function _multipleToStruct($files) + { + $struct = array('dirs' => array(), 'files' => array()); + settype($files, 'array'); + foreach ($files as $file) { + if (is_dir($file) && !is_link($file)) { + $tmp = System::_dirToStruct($file, 0); + $struct = array_merge_recursive($tmp, $struct); + } else { + if (!in_array($file, $struct['files'])) { + $struct['files'][] = $file; + } + } + } + return $struct; + } + + /** + * The rm command for removing files. + * Supports multiple files and dirs and also recursive deletes + * + * @param string $args the arguments for rm + * @return mixed PEAR_Error or true for success + * @static + * @access public + */ + public static function rm($args) + { + $opts = System::_parseArgs($args, 'rf'); // "f" does nothing but I like it :-) + if (PEAR::isError($opts)) { + return System::raiseError($opts); + } + foreach ($opts[0] as $opt) { + if ($opt[0] == 'r') { + $do_recursive = true; + } + } + $ret = true; + if (isset($do_recursive)) { + $struct = System::_multipleToStruct($opts[1]); + foreach ($struct['files'] as $file) { + if (!@unlink($file)) { + $ret = false; + } + } + + rsort($struct['dirs']); + foreach ($struct['dirs'] as $dir) { + if (!@rmdir($dir)) { + $ret = false; + } + } + } else { + foreach ($opts[1] as $file) { + $delete = (is_dir($file)) ? 'rmdir' : 'unlink'; + if (!@$delete($file)) { + $ret = false; + } + } + } + return $ret; + } + + /** + * Make directories. + * + * The -p option will create parent directories + * @param string $args the name of the director(y|ies) to create + * @return bool True for success + */ + public static function mkDir($args) + { + $opts = System::_parseArgs($args, 'pm:'); + if (PEAR::isError($opts)) { + return System::raiseError($opts); + } + + $mode = 0777; // default mode + foreach ($opts[0] as $opt) { + if ($opt[0] == 'p') { + $create_parents = true; + } elseif ($opt[0] == 'm') { + // if the mode is clearly an octal number (starts with 0) + // convert it to decimal + if (strlen($opt[1]) && $opt[1]{0} == '0') { + $opt[1] = octdec($opt[1]); + } else { + // convert to int + $opt[1] += 0; + } + $mode = $opt[1]; + } + } + + $ret = true; + if (isset($create_parents)) { + foreach ($opts[1] as $dir) { + $dirstack = array(); + while ((!file_exists($dir) || !is_dir($dir)) && + $dir != DIRECTORY_SEPARATOR) { + array_unshift($dirstack, $dir); + $dir = dirname($dir); + } + + while ($newdir = array_shift($dirstack)) { + if (!is_writeable(dirname($newdir))) { + $ret = false; + break; + } + + if (!mkdir($newdir, $mode)) { + $ret = false; + } + } + } + } else { + foreach($opts[1] as $dir) { + if ((@file_exists($dir) || !is_dir($dir)) && !mkdir($dir, $mode)) { + $ret = false; + } + } + } + + return $ret; + } + + /** + * Concatenate files + * + * Usage: + * 1) $var = System::cat('sample.txt test.txt'); + * 2) System::cat('sample.txt test.txt > final.txt'); + * 3) System::cat('sample.txt test.txt >> final.txt'); + * + * Note: as the class use fopen, urls should work also (test that) + * + * @param string $args the arguments + * @return boolean true on success + */ + public static function &cat($args) + { + $ret = null; + $files = array(); + if (!is_array($args)) { + $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY); + } + + $count_args = count($args); + for ($i = 0; $i < $count_args; $i++) { + if ($args[$i] == '>') { + $mode = 'wb'; + $outputfile = $args[$i+1]; + break; + } elseif ($args[$i] == '>>') { + $mode = 'ab+'; + $outputfile = $args[$i+1]; + break; + } else { + $files[] = $args[$i]; + } + } + $outputfd = false; + if (isset($mode)) { + if (!$outputfd = fopen($outputfile, $mode)) { + $err = System::raiseError("Could not open $outputfile"); + return $err; + } + $ret = true; + } + foreach ($files as $file) { + if (!$fd = fopen($file, 'r')) { + System::raiseError("Could not open $file"); + continue; + } + while ($cont = fread($fd, 2048)) { + if (is_resource($outputfd)) { + fwrite($outputfd, $cont); + } else { + $ret .= $cont; + } + } + fclose($fd); + } + if (is_resource($outputfd)) { + fclose($outputfd); + } + return $ret; + } + + /** + * Creates temporary files or directories. This function will remove + * the created files when the scripts finish its execution. + * + * Usage: + * 1) $tempfile = System::mktemp("prefix"); + * 2) $tempdir = System::mktemp("-d prefix"); + * 3) $tempfile = System::mktemp(); + * 4) $tempfile = System::mktemp("-t /var/tmp prefix"); + * + * prefix -> The string that will be prepended to the temp name + * (defaults to "tmp"). + * -d -> A temporary dir will be created instead of a file. + * -t -> The target dir where the temporary (file|dir) will be created. If + * this param is missing by default the env vars TMP on Windows or + * TMPDIR in Unix will be used. If these vars are also missing + * c:\windows\temp or /tmp will be used. + * + * @param string $args The arguments + * @return mixed the full path of the created (file|dir) or false + * @see System::tmpdir() + */ + public static function mktemp($args = null) + { + static $first_time = true; + $opts = System::_parseArgs($args, 't:d'); + if (PEAR::isError($opts)) { + return System::raiseError($opts); + } + + foreach ($opts[0] as $opt) { + if ($opt[0] == 'd') { + $tmp_is_dir = true; + } elseif ($opt[0] == 't') { + $tmpdir = $opt[1]; + } + } + + $prefix = (isset($opts[1][0])) ? $opts[1][0] : 'tmp'; + if (!isset($tmpdir)) { + $tmpdir = System::tmpdir(); + } + + if (!System::mkDir(array('-p', $tmpdir))) { + return false; + } + + $tmp = tempnam($tmpdir, $prefix); + if (isset($tmp_is_dir)) { + unlink($tmp); // be careful possible race condition here + if (!mkdir($tmp, 0700)) { + return System::raiseError("Unable to create temporary directory $tmpdir"); + } + } + + $GLOBALS['_System_temp_files'][] = $tmp; + if (isset($tmp_is_dir)) { + //$GLOBALS['_System_temp_files'][] = dirname($tmp); + } + + if ($first_time) { + PEAR::registerShutdownFunc(array('System', '_removeTmpFiles')); + $first_time = false; + } + + return $tmp; + } + + /** + * Remove temporary files created my mkTemp. This function is executed + * at script shutdown time + */ + public static function _removeTmpFiles() + { + if (count($GLOBALS['_System_temp_files'])) { + $delete = $GLOBALS['_System_temp_files']; + array_unshift($delete, '-r'); + System::rm($delete); + $GLOBALS['_System_temp_files'] = array(); + } + } + + /** + * Get the path of the temporal directory set in the system + * by looking in its environments variables. + * Note: php.ini-recommended removes the "E" from the variables_order setting, + * making unavaible the $_ENV array, that s why we do tests with _ENV + * + * @return string The temporary directory on the system + */ + public static function tmpdir() + { + if (OS_WINDOWS) { + if ($var = isset($_ENV['TMP']) ? $_ENV['TMP'] : getenv('TMP')) { + return $var; + } + if ($var = isset($_ENV['TEMP']) ? $_ENV['TEMP'] : getenv('TEMP')) { + return $var; + } + if ($var = isset($_ENV['USERPROFILE']) ? $_ENV['USERPROFILE'] : getenv('USERPROFILE')) { + return $var; + } + if ($var = isset($_ENV['windir']) ? $_ENV['windir'] : getenv('windir')) { + return $var; + } + return getenv('SystemRoot') . '\temp'; + } + if ($var = isset($_ENV['TMPDIR']) ? $_ENV['TMPDIR'] : getenv('TMPDIR')) { + return $var; + } + return realpath('/tmp'); + } + + /** + * The "which" command (show the full path of a command) + * + * @param string $program The command to search for + * @param mixed $fallback Value to return if $program is not found + * + * @return mixed A string with the full path or false if not found + * @author Stig Bakken + */ + public static function which($program, $fallback = false) + { + // enforce API + if (!is_string($program) || '' == $program) { + return $fallback; + } + + // full path given + if (basename($program) != $program) { + $path_elements[] = dirname($program); + $program = basename($program); + } else { + $path = getenv('PATH'); + if (!$path) { + $path = getenv('Path'); // some OSes are just stupid enough to do this + } + + $path_elements = explode(PATH_SEPARATOR, $path); + } + + if (OS_WINDOWS) { + $exe_suffixes = getenv('PATHEXT') + ? explode(PATH_SEPARATOR, getenv('PATHEXT')) + : array('.exe','.bat','.cmd','.com'); + // allow passing a command.exe param + if (strpos($program, '.') !== false) { + array_unshift($exe_suffixes, ''); + } + } else { + $exe_suffixes = array(''); + } + + foreach ($exe_suffixes as $suff) { + foreach ($path_elements as $dir) { + $file = $dir . DIRECTORY_SEPARATOR . $program . $suff; + if (is_executable($file)) { + return $file; + } + } + } + return $fallback; + } + + /** + * The "find" command + * + * Usage: + * + * System::find($dir); + * System::find("$dir -type d"); + * System::find("$dir -type f"); + * System::find("$dir -name *.php"); + * System::find("$dir -name *.php -name *.htm*"); + * System::find("$dir -maxdepth 1"); + * + * Params implemented: + * $dir -> Start the search at this directory + * -type d -> return only directories + * -type f -> return only files + * -maxdepth -> max depth of recursion + * -name -> search pattern (bash style). Multiple -name param allowed + * + * @param mixed Either array or string with the command line + * @return array Array of found files + */ + public static function find($args) + { + if (!is_array($args)) { + $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY); + } + $dir = realpath(array_shift($args)); + if (!$dir) { + return array(); + } + $patterns = array(); + $depth = 0; + $do_files = $do_dirs = true; + $args_count = count($args); + for ($i = 0; $i < $args_count; $i++) { + switch ($args[$i]) { + case '-type': + if (in_array($args[$i+1], array('d', 'f'))) { + if ($args[$i+1] == 'd') { + $do_files = false; + } else { + $do_dirs = false; + } + } + $i++; + break; + case '-name': + $name = preg_quote($args[$i+1], '#'); + // our magic characters ? and * have just been escaped, + // so now we change the escaped versions to PCRE operators + $name = strtr($name, array('\?' => '.', '\*' => '.*')); + $patterns[] = '('.$name.')'; + $i++; + break; + case '-maxdepth': + $depth = $args[$i+1]; + break; + } + } + $path = System::_dirToStruct($dir, $depth, 0, true); + if ($do_files && $do_dirs) { + $files = array_merge($path['files'], $path['dirs']); + } elseif ($do_dirs) { + $files = $path['dirs']; + } else { + $files = $path['files']; + } + if (count($patterns)) { + $dsq = preg_quote(DIRECTORY_SEPARATOR, '#'); + $pattern = '#(^|'.$dsq.')'.implode('|', $patterns).'($|'.$dsq.')#'; + $ret = array(); + $files_count = count($files); + for ($i = 0; $i < $files_count; $i++) { + // only search in the part of the file below the current directory + $filepart = basename($files[$i]); + if (preg_match($pattern, $filepart)) { + $ret[] = $files[$i]; + } + } + return $ret; + } + return $files; + } +} \ No newline at end of file diff --git a/lib/composer/vendor/pear/pear_exception/.gitignore b/lib/composer/vendor/pear/pear_exception/.gitignore new file mode 100644 index 00000000..479265b0 --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/.gitignore @@ -0,0 +1,6 @@ +PEAR_Exception*.tgz + +# composer related +composer.lock +composer.phar +vendor diff --git a/lib/composer/vendor/pear/pear_exception/.travis.yml b/lib/composer/vendor/pear/pear_exception/.travis.yml new file mode 100644 index 00000000..18875d99 --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/.travis.yml @@ -0,0 +1,7 @@ +language: php +php: + - 5.6 + - 5.5 + - 5.4 +script: + - cd tests && phpunit --coverage-text . diff --git a/lib/composer/vendor/pear/pear_exception/LICENSE b/lib/composer/vendor/pear/pear_exception/LICENSE new file mode 100644 index 00000000..a00a2421 --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 1997-2009, + Stig Bakken , + Gregory Beaver , + Helgi Þormar Þorbjörnsson , + Tomas V.V.Cox , + Martin Jansen . +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/composer/vendor/pear/pear_exception/PEAR/Exception.php b/lib/composer/vendor/pear/pear_exception/PEAR/Exception.php new file mode 100644 index 00000000..5abf4f84 --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/PEAR/Exception.php @@ -0,0 +1,456 @@ + + * @author Hans Lellelid + * @author Bertrand Mansion + * @author Greg Beaver + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR_Exception + * @since File available since Release 1.0.0 + */ + + +/** + * Base PEAR_Exception Class + * + * 1) Features: + * + * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception)) + * - Definable triggers, shot when exceptions occur + * - Pretty and informative error messages + * - Added more context info available (like class, method or cause) + * - cause can be a PEAR_Exception or an array of mixed + * PEAR_Exceptions/PEAR_ErrorStack warnings + * - callbacks for specific exception classes and their children + * + * 2) Ideas: + * + * - Maybe a way to define a 'template' for the output + * + * 3) Inherited properties from PHP Exception Class: + * + * protected $message + * protected $code + * protected $line + * protected $file + * private $trace + * + * 4) Inherited methods from PHP Exception Class: + * + * __clone + * __construct + * getMessage + * getCode + * getFile + * getLine + * getTraceSafe + * getTraceSafeAsString + * __toString + * + * 5) Usage example + * + * + * require_once 'PEAR/Exception.php'; + * + * class Test { + * function foo() { + * throw new PEAR_Exception('Error Message', ERROR_CODE); + * } + * } + * + * function myLogger($pear_exception) { + * echo $pear_exception->getMessage(); + * } + * // each time a exception is thrown the 'myLogger' will be called + * // (its use is completely optional) + * PEAR_Exception::addObserver('myLogger'); + * $test = new Test; + * try { + * $test->foo(); + * } catch (PEAR_Exception $e) { + * print $e; + * } + * + * + * @category PEAR + * @package PEAR_Exception + * @author Tomas V.V.Cox + * @author Hans Lellelid + * @author Bertrand Mansion + * @author Greg Beaver + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/package/PEAR_Exception + * @since Class available since Release 1.0.0 + */ +class PEAR_Exception extends Exception +{ + const OBSERVER_PRINT = -2; + const OBSERVER_TRIGGER = -4; + const OBSERVER_DIE = -8; + protected $cause; + private static $_observers = array(); + private static $_uniqueid = 0; + private $_trace; + + /** + * Supported signatures: + * - PEAR_Exception(string $message); + * - PEAR_Exception(string $message, int $code); + * - PEAR_Exception(string $message, Exception $cause); + * - PEAR_Exception(string $message, Exception $cause, int $code); + * - PEAR_Exception(string $message, PEAR_Error $cause); + * - PEAR_Exception(string $message, PEAR_Error $cause, int $code); + * - PEAR_Exception(string $message, array $causes); + * - PEAR_Exception(string $message, array $causes, int $code); + * + * @param string $message exception message + * @param int|Exception|PEAR_Error|array|null $p2 exception cause + * @param int|null $p3 exception code or null + */ + public function __construct($message, $p2 = null, $p3 = null) + { + if (is_int($p2)) { + $code = $p2; + $this->cause = null; + } elseif (is_object($p2) || is_array($p2)) { + // using is_object allows both Exception and PEAR_Error + if (is_object($p2) && !($p2 instanceof Exception)) { + if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) { + throw new PEAR_Exception( + 'exception cause must be Exception, ' . + 'array, or PEAR_Error' + ); + } + } + $code = $p3; + if (is_array($p2) && isset($p2['message'])) { + // fix potential problem of passing in a single warning + $p2 = array($p2); + } + $this->cause = $p2; + } else { + $code = null; + $this->cause = null; + } + parent::__construct($message, $code); + $this->signal(); + } + + /** + * Add an exception observer + * + * @param mixed $callback - A valid php callback, see php func is_callable() + * - A PEAR_Exception::OBSERVER_* constant + * - An array(const PEAR_Exception::OBSERVER_*, + * mixed $options) + * @param string $label The name of the observer. Use this if you want + * to remove it later with removeObserver() + * + * @return void + */ + public static function addObserver($callback, $label = 'default') + { + self::$_observers[$label] = $callback; + } + + /** + * Remove an exception observer + * + * @param string $label Name of the observer + * + * @return void + */ + public static function removeObserver($label = 'default') + { + unset(self::$_observers[$label]); + } + + /** + * Generate a unique ID for an observer + * + * @return int unique identifier for an observer + */ + public static function getUniqueId() + { + return self::$_uniqueid++; + } + + /** + * Send a signal to all observers + * + * @return void + */ + protected function signal() + { + foreach (self::$_observers as $func) { + if (is_callable($func)) { + call_user_func($func, $this); + continue; + } + settype($func, 'array'); + switch ($func[0]) { + case self::OBSERVER_PRINT : + $f = (isset($func[1])) ? $func[1] : '%s'; + printf($f, $this->getMessage()); + break; + case self::OBSERVER_TRIGGER : + $f = (isset($func[1])) ? $func[1] : E_USER_NOTICE; + trigger_error($this->getMessage(), $f); + break; + case self::OBSERVER_DIE : + $f = (isset($func[1])) ? $func[1] : '%s'; + die(printf($f, $this->getMessage())); + break; + default: + trigger_error('invalid observer type', E_USER_WARNING); + } + } + } + + /** + * Return specific error information that can be used for more detailed + * error messages or translation. + * + * This method may be overridden in child exception classes in order + * to add functionality not present in PEAR_Exception and is a placeholder + * to define API + * + * The returned array must be an associative array of parameter => value like so: + *
+     * array('name' => $name, 'context' => array(...))
+     * 
+ * + * @return array + */ + public function getErrorData() + { + return array(); + } + + /** + * Returns the exception that caused this exception to be thrown + * + * @return Exception|array The context of the exception + */ + public function getCause() + { + return $this->cause; + } + + /** + * Function must be public to call on caused exceptions + * + * @param array $causes Array that gets filled. + * + * @return void + */ + public function getCauseMessage(&$causes) + { + $trace = $this->getTraceSafe(); + $cause = array('class' => get_class($this), + 'message' => $this->message, + 'file' => 'unknown', + 'line' => 'unknown'); + if (isset($trace[0])) { + if (isset($trace[0]['file'])) { + $cause['file'] = $trace[0]['file']; + $cause['line'] = $trace[0]['line']; + } + } + $causes[] = $cause; + if ($this->cause instanceof PEAR_Exception) { + $this->cause->getCauseMessage($causes); + } elseif ($this->cause instanceof Exception) { + $causes[] = array('class' => get_class($this->cause), + 'message' => $this->cause->getMessage(), + 'file' => $this->cause->getFile(), + 'line' => $this->cause->getLine()); + } elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) { + $causes[] = array('class' => get_class($this->cause), + 'message' => $this->cause->getMessage(), + 'file' => 'unknown', + 'line' => 'unknown'); + } elseif (is_array($this->cause)) { + foreach ($this->cause as $cause) { + if ($cause instanceof PEAR_Exception) { + $cause->getCauseMessage($causes); + } elseif ($cause instanceof Exception) { + $causes[] = array('class' => get_class($cause), + 'message' => $cause->getMessage(), + 'file' => $cause->getFile(), + 'line' => $cause->getLine()); + } elseif (class_exists('PEAR_Error') + && $cause instanceof PEAR_Error + ) { + $causes[] = array('class' => get_class($cause), + 'message' => $cause->getMessage(), + 'file' => 'unknown', + 'line' => 'unknown'); + } elseif (is_array($cause) && isset($cause['message'])) { + // PEAR_ErrorStack warning + $causes[] = array( + 'class' => $cause['package'], + 'message' => $cause['message'], + 'file' => isset($cause['context']['file']) ? + $cause['context']['file'] : + 'unknown', + 'line' => isset($cause['context']['line']) ? + $cause['context']['line'] : + 'unknown', + ); + } + } + } + } + + /** + * Build a backtrace and return it + * + * @return array Backtrace + */ + public function getTraceSafe() + { + if (!isset($this->_trace)) { + $this->_trace = $this->getTrace(); + if (empty($this->_trace)) { + $backtrace = debug_backtrace(); + $this->_trace = array($backtrace[count($backtrace)-1]); + } + } + return $this->_trace; + } + + /** + * Gets the first class of the backtrace + * + * @return string Class name + */ + public function getErrorClass() + { + $trace = $this->getTraceSafe(); + return $trace[0]['class']; + } + + /** + * Gets the first method of the backtrace + * + * @return string Method/function name + */ + public function getErrorMethod() + { + $trace = $this->getTraceSafe(); + return $trace[0]['function']; + } + + /** + * Converts the exception to a string (HTML or plain text) + * + * @return string String representation + * + * @see toHtml() + * @see toText() + */ + public function __toString() + { + if (isset($_SERVER['REQUEST_URI'])) { + return $this->toHtml(); + } + return $this->toText(); + } + + /** + * Generates a HTML representation of the exception + * + * @return string HTML code + */ + public function toHtml() + { + $trace = $this->getTraceSafe(); + $causes = array(); + $this->getCauseMessage($causes); + $html = '' . "\n"; + foreach ($causes as $i => $cause) { + $html .= '\n"; + } + $html .= '' . "\n" + . '' + . '' + . '' . "\n"; + + foreach ($trace as $k => $v) { + $html .= '' + . '' + . '' . "\n"; + } + $html .= '' + . '' + . '' . "\n" + . '
' + . str_repeat('-', $i) . ' ' . $cause['class'] . ': ' + . htmlspecialchars($cause['message']) + . ' in ' . $cause['file'] . ' ' + . 'on line ' . $cause['line'] . '' + . "
Exception trace
#FunctionLocation
' . $k . ''; + if (!empty($v['class'])) { + $html .= $v['class'] . $v['type']; + } + $html .= $v['function']; + $args = array(); + if (!empty($v['args'])) { + foreach ($v['args'] as $arg) { + if (is_null($arg)) { + $args[] = 'null'; + } else if (is_array($arg)) { + $args[] = 'Array'; + } else if (is_object($arg)) { + $args[] = 'Object('.get_class($arg).')'; + } else if (is_bool($arg)) { + $args[] = $arg ? 'true' : 'false'; + } else if (is_int($arg) || is_double($arg)) { + $args[] = $arg; + } else { + $arg = (string)$arg; + $str = htmlspecialchars(substr($arg, 0, 16)); + if (strlen($arg) > 16) { + $str .= '…'; + } + $args[] = "'" . $str . "'"; + } + } + } + $html .= '(' . implode(', ', $args) . ')' + . '' . (isset($v['file']) ? $v['file'] : 'unknown') + . ':' . (isset($v['line']) ? $v['line'] : 'unknown') + . '
' . ($k+1) . '{main} 
'; + return $html; + } + + /** + * Generates text representation of the exception and stack trace + * + * @return string + */ + public function toText() + { + $causes = array(); + $this->getCauseMessage($causes); + $causeMsg = ''; + foreach ($causes as $i => $cause) { + $causeMsg .= str_repeat(' ', $i) . $cause['class'] . ': ' + . $cause['message'] . ' in ' . $cause['file'] + . ' on line ' . $cause['line'] . "\n"; + } + return $causeMsg . $this->getTraceAsString(); + } +} +?> diff --git a/lib/composer/vendor/pear/pear_exception/composer.json b/lib/composer/vendor/pear/pear_exception/composer.json new file mode 100644 index 00000000..ce33ed1c --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/composer.json @@ -0,0 +1,43 @@ +{ + "name": "pear/pear_exception", + "description": "The PEAR Exception base class.", + "type": "class", + "keywords": [ + "exception" + ], + "homepage": "https://github.com/pear/PEAR_Exception", + "license": "BSD-2-Clause", + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "require": { + "php": ">=4.4.0" + }, + "autoload": { + "psr-0": { + "PEAR": "" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "include-path": [ + "." + ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception", + "source": "https://github.com/pear/PEAR_Exception" + }, + "require-dev": { + "phpunit/phpunit": "*" + } +} diff --git a/lib/composer/vendor/pear/pear_exception/package.xml b/lib/composer/vendor/pear/pear_exception/package.xml new file mode 100644 index 00000000..98290c6a --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/package.xml @@ -0,0 +1,120 @@ + + + PEAR_Exception + pear.php.net + The PEAR Exception base class + PEAR_Exception PHP5 error handling mechanism + + + Christian Weiske + cweiske + cweiske@php.net + yes + + + Helgi Thormar + dufuz + dufuz@php.net + no + + + Greg Beaver + cellog + cellog@php.net + no + + + 2015-02-10 + + + 1.0.0 + 1.0.0 + + + stable + stable + + New BSD License + + This package was split out from the PEAR package. + If you use PEAR_Exception in your package and use nothing from the PEAR package + then it's better to depend on just PEAR_Exception. + + + + + + + + + + + + + + + + + + 5.4.0 + + + 1.9.5 + + + + + + + + + + 1.0.0 + 1.0.0 + + + stable + stable + + 2015-02-10 + New BSD License + Release stable version + + + + + 1.0.0beta2 + 1.0.0 + + + beta + stable + + 2014-02-21 + New BSD License + Bump up PEAR dependency. + + + + + 1.0.0beta1 + 1.0.0 + + + beta + stable + + 2012-05-10 + New BSD License + +This packge was split out from the PEAR package. If you use PEAR_Exception in your package +and use nothing from the PEAR package then it's better to depend on just PEAR_Exception. + + + + diff --git a/lib/composer/vendor/pear/pear_exception/tests/PEAR/ExceptionTest.php b/lib/composer/vendor/pear/pear_exception/tests/PEAR/ExceptionTest.php new file mode 100644 index 00000000..61d2df4f --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/tests/PEAR/ExceptionTest.php @@ -0,0 +1,78 @@ +assertNull($e->getCause()); + } + + public function testGetCauseException() + { + $cause = new Exception('foo bar'); + $e = new PEAR_Exception('I caught an exception', $cause); + $this->assertNotNull($e->getCause()); + $this->assertInstanceOf('Exception', $e->getCause()); + $this->assertEquals($cause, $e->getCause()); + } + + public function testGetCauseMessage() + { + $cause = new Exception('foo bar'); + $e = new PEAR_Exception('I caught an exception', $cause); + + $e->getCauseMessage($causes); + $this->assertEquals('I caught an exception', $causes[0]['message']); + $this->assertEquals('foo bar', $causes[1]['message']); + } + + public function testGetTraceSafe() + { + $e = new PEAR_Exception('oops'); + $this->assertInternalType('array', $e->getTraceSafe()); + } + + public function testGetErrorClass() + { + $e = new PEAR_Exception('oops'); + $this->assertEquals('PEAR_ExceptionTest', $e->getErrorClass()); + } + + public function testGetErrorMethod() + { + $e = new PEAR_Exception('oops'); + $this->assertEquals('testGetErrorMethod', $e->getErrorMethod()); + } + + public function test__toString() + { + $e = new PEAR_Exception('oops'); + $this->assertInternalType('string', (string) $e); + $this->assertContains('oops', (string) $e); + } + + public function testToHtml() + { + $e = new PEAR_Exception('oops'); + $html = $e->toHtml(); + $this->assertInternalType('string', $html); + $this->assertContains('oops', $html); + } +} +?> diff --git a/lib/composer/vendor/phar-io/manifest/.gitignore b/lib/composer/vendor/phar-io/manifest/.gitignore new file mode 100644 index 00000000..94d433b5 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/.gitignore @@ -0,0 +1,8 @@ +/.idea +/.php_cs.cache +/composer.lock +/src/autoload.php +/tools +/vendor + +/build diff --git a/lib/composer/vendor/phar-io/manifest/.php_cs b/lib/composer/vendor/phar-io/manifest/.php_cs new file mode 100644 index 00000000..159d6a35 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/.php_cs @@ -0,0 +1,67 @@ +files() + ->in('src') + ->in('tests') + ->name('*.php'); + +return Symfony\CS\Config\Config::create() + ->setUsingCache(true) + ->level(\Symfony\CS\FixerInterface::NONE_LEVEL) + ->fixers( + array( + 'align_double_arrow', + 'align_equals', + 'concat_with_spaces', + 'duplicate_semicolon', + 'elseif', + 'empty_return', + 'encoding', + 'eof_ending', + 'extra_empty_lines', + 'function_call_space', + 'function_declaration', + 'indentation', + 'join_function', + 'line_after_namespace', + 'linefeed', + 'list_commas', + 'lowercase_constants', + 'lowercase_keywords', + 'method_argument_space', + 'multiple_use', + 'namespace_no_leading_whitespace', + 'no_blank_lines_after_class_opening', + 'no_empty_lines_after_phpdocs', + 'parenthesis', + 'php_closing_tag', + 'phpdoc_indent', + 'phpdoc_no_access', + 'phpdoc_no_empty_return', + 'phpdoc_no_package', + 'phpdoc_params', + 'phpdoc_scalar', + 'phpdoc_separation', + 'phpdoc_to_comment', + 'phpdoc_trim', + 'phpdoc_types', + 'phpdoc_var_without_name', + 'remove_lines_between_uses', + 'return', + 'self_accessor', + 'short_array_syntax', + 'short_tag', + 'single_line_after_imports', + 'single_quote', + 'spaces_before_semicolon', + 'spaces_cast', + 'ternary_spaces', + 'trailing_spaces', + 'trim_array_spaces', + 'unused_use', + 'visibility', + 'whitespacy_lines' + ) + ) + ->finder($finder); + diff --git a/lib/composer/vendor/phar-io/manifest/.travis.yml b/lib/composer/vendor/phar-io/manifest/.travis.yml new file mode 100644 index 00000000..b4be10f9 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/.travis.yml @@ -0,0 +1,33 @@ +os: +- linux + +language: php + +before_install: + - wget https://phar.io/releases/phive.phar + - wget https://phar.io/releases/phive.phar.asc + - gpg --keyserver hkps.pool.sks-keyservers.net --recv-keys 0x9B2D5D79 + - gpg --verify phive.phar.asc phive.phar + - chmod +x phive.phar + - sudo mv phive.phar /usr/bin/phive + +install: + - ant setup + +script: ./tools/phpunit + +php: + - 5.6 + - 7.0 + - 7.1 + - 7.0snapshot + - 7.1snapshot + - master + +matrix: + allow_failures: + - php: master + fast_finish: true + +notifications: + email: false diff --git a/lib/composer/vendor/phar-io/manifest/LICENSE b/lib/composer/vendor/phar-io/manifest/LICENSE new file mode 100644 index 00000000..96051b14 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/LICENSE @@ -0,0 +1,31 @@ +manifest + +Copyright (c) 2016 Arne Blankerts , Sebastian Heuer , Sebastian Bergmann , and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of Arne Blankerts nor the names of contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + diff --git a/lib/composer/vendor/phar-io/manifest/README.md b/lib/composer/vendor/phar-io/manifest/README.md new file mode 100644 index 00000000..e6d0b055 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/README.md @@ -0,0 +1,30 @@ +# Manifest + +Component for reading [phar.io](https://phar.io/) manifest information from a [PHP Archive (PHAR)](http://php.net/phar). + +[![Build Status](https://travis-ci.org/phar-io/manifest.svg?branch=master)](https://travis-ci.org/phar-io/manifest) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/phar-io/manifest/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/phar-io/manifest/?branch=master) +[![SensioLabsInsight](https://insight.sensiolabs.com/projects/d8cc6035-69ad-477d-bd1a-ccc605480fd7/mini.png)](https://insight.sensiolabs.com/projects/d8cc6035-69ad-477d-bd1a-ccc605480fd7) + +## Installation + +You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): + + composer require phar-io/manifest + +If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: + + composer require --dev phar-io/manifest + +## Usage + +```php +use PharIo\Manifest\ManifestLoader; +use PharIo\Manifest\ManifestSerializer; + +$manifest = ManifestLoader::fromFile('manifest.xml'); + +var_dump($manifest); + +echo (new ManifestSerializer)->serializeToString($manifest); +``` diff --git a/lib/composer/vendor/phar-io/manifest/build.xml b/lib/composer/vendor/phar-io/manifest/build.xml new file mode 100644 index 00000000..fc6eb1a8 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/build.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/composer.json b/lib/composer/vendor/phar-io/manifest/composer.json new file mode 100644 index 00000000..832134d6 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/composer.json @@ -0,0 +1,42 @@ +{ + "name": "phar-io/manifest", + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "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" + } + ], + "support": { + "issues": "https://github.com/phar-io/manifest/issues" + }, + "require": { + "php": "^5.6 || ^7.0", + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1" + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} + diff --git a/lib/composer/vendor/phar-io/manifest/examples/example-01.php b/lib/composer/vendor/phar-io/manifest/examples/example-01.php new file mode 100644 index 00000000..345c407a --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/examples/example-01.php @@ -0,0 +1,23 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use PharIo\Manifest\ManifestLoader; +use PharIo\Manifest\ManifestSerializer; + +require __DIR__ . '/../vendor/autoload.php'; + +$manifest = ManifestLoader::fromFile(__DIR__ . '/../tests/_fixture/phpunit-5.6.5.xml'); + +echo sprintf( + "Manifest for %s (%s):\n\n", + $manifest->getName(), + $manifest->getVersion()->getVersionString() +); +echo (new ManifestSerializer)->serializeToString($manifest); diff --git a/lib/composer/vendor/phar-io/manifest/phive.xml b/lib/composer/vendor/phar-io/manifest/phive.xml new file mode 100644 index 00000000..69f2f91b --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/phive.xml @@ -0,0 +1,4 @@ + + + + diff --git a/lib/composer/vendor/phar-io/manifest/phpunit.xml b/lib/composer/vendor/phar-io/manifest/phpunit.xml new file mode 100644 index 00000000..2d7708ee --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/phpunit.xml @@ -0,0 +1,20 @@ + + + + tests + + + + + src + + + diff --git a/lib/composer/vendor/phar-io/manifest/src/ManifestDocumentMapper.php b/lib/composer/vendor/phar-io/manifest/src/ManifestDocumentMapper.php new file mode 100644 index 00000000..d41e4f93 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/ManifestDocumentMapper.php @@ -0,0 +1,193 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PharIo\Version\Exception as VersionException; +use PharIo\Version\VersionConstraintParser; + +class ManifestDocumentMapper { + /** + * @param ManifestDocument $document + * + * @returns Manifest + * + * @throws ManifestDocumentMapperException + */ + public function map(ManifestDocument $document) { + try { + $contains = $document->getContainsElement(); + $type = $this->mapType($contains); + $copyright = $this->mapCopyright($document->getCopyrightElement()); + $requirements = $this->mapRequirements($document->getRequiresElement()); + $bundledComponents = $this->mapBundledComponents($document); + + return new Manifest( + new ApplicationName($contains->getName()), + new Version($contains->getVersion()), + $type, + $copyright, + $requirements, + $bundledComponents + ); + } catch (VersionException $e) { + throw new ManifestDocumentMapperException($e->getMessage(), $e->getCode(), $e); + } catch (Exception $e) { + throw new ManifestDocumentMapperException($e->getMessage(), $e->getCode(), $e); + } + } + + /** + * @param ContainsElement $contains + * + * @return Type + * + * @throws ManifestDocumentMapperException + */ + private function mapType(ContainsElement $contains) { + switch ($contains->getType()) { + case 'application': + return Type::application(); + case 'library': + return Type::library(); + case 'extension': + return $this->mapExtension($contains->getExtensionElement()); + } + + throw new ManifestDocumentMapperException( + sprintf('Unsupported type %s', $contains->getType()) + ); + } + + /** + * @param CopyrightElement $copyright + * + * @return CopyrightInformation + * + * @throws InvalidUrlException + * @throws InvalidEmailException + */ + private function mapCopyright(CopyrightElement $copyright) { + $authors = new AuthorCollection(); + + foreach($copyright->getAuthorElements() as $authorElement) { + $authors->add( + new Author( + $authorElement->getName(), + new Email($authorElement->getEmail()) + ) + ); + } + + $licenseElement = $copyright->getLicenseElement(); + $license = new License( + $licenseElement->getType(), + new Url($licenseElement->getUrl()) + ); + + return new CopyrightInformation( + $authors, + $license + ); + } + + /** + * @param RequiresElement $requires + * + * @return RequirementCollection + * + * @throws ManifestDocumentMapperException + */ + private function mapRequirements(RequiresElement $requires) { + $collection = new RequirementCollection(); + $phpElement = $requires->getPHPElement(); + $parser = new VersionConstraintParser; + + try { + $versionConstraint = $parser->parse($phpElement->getVersion()); + } catch (VersionException $e) { + throw new ManifestDocumentMapperException( + sprintf('Unsupported version constraint - %s', $e->getMessage()), + $e->getCode(), + $e + ); + } + + $collection->add( + new PhpVersionRequirement( + $versionConstraint + ) + ); + + if (!$phpElement->hasExtElements()) { + return $collection; + } + + foreach($phpElement->getExtElements() as $extElement) { + $collection->add( + new PhpExtensionRequirement($extElement->getName()) + ); + } + + return $collection; + } + + /** + * @param ManifestDocument $document + * + * @return BundledComponentCollection + */ + private function mapBundledComponents(ManifestDocument $document) { + $collection = new BundledComponentCollection(); + + if (!$document->hasBundlesElement()) { + return $collection; + } + + foreach($document->getBundlesElement()->getComponentElements() as $componentElement) { + $collection->add( + new BundledComponent( + $componentElement->getName(), + new Version( + $componentElement->getVersion() + ) + ) + ); + } + + return $collection; + } + + /** + * @param ExtensionElement $extension + * + * @return Extension + * + * @throws ManifestDocumentMapperException + */ + private function mapExtension(ExtensionElement $extension) { + try { + $parser = new VersionConstraintParser; + $versionConstraint = $parser->parse($extension->getCompatible()); + + return Type::extension( + new ApplicationName($extension->getFor()), + $versionConstraint + ); + } catch (VersionException $e) { + throw new ManifestDocumentMapperException( + sprintf('Unsupported version constraint - %s', $e->getMessage()), + $e->getCode(), + $e + ); + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/ManifestLoader.php b/lib/composer/vendor/phar-io/manifest/src/ManifestLoader.php new file mode 100644 index 00000000..81c5c90e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/ManifestLoader.php @@ -0,0 +1,66 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ManifestLoader { + /** + * @param string $filename + * + * @return Manifest + * + * @throws ManifestLoaderException + */ + public static function fromFile($filename) { + try { + return (new ManifestDocumentMapper())->map( + ManifestDocument::fromFile($filename) + ); + } catch (Exception $e) { + throw new ManifestLoaderException( + sprintf('Loading %s failed.', $filename), + $e->getCode(), + $e + ); + } + } + + /** + * @param string $filename + * + * @return Manifest + * + * @throws ManifestLoaderException + */ + public static function fromPhar($filename) { + return self::fromFile('phar://' . $filename . '/manifest.xml'); + } + + /** + * @param string $manifest + * + * @return Manifest + * + * @throws ManifestLoaderException + */ + public static function fromString($manifest) { + try { + return (new ManifestDocumentMapper())->map( + ManifestDocument::fromString($manifest) + ); + } catch (Exception $e) { + throw new ManifestLoaderException( + 'Processing string failed', + $e->getCode(), + $e + ); + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/ManifestSerializer.php b/lib/composer/vendor/phar-io/manifest/src/ManifestSerializer.php new file mode 100644 index 00000000..4c18ddd8 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/ManifestSerializer.php @@ -0,0 +1,163 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\AnyVersionConstraint; +use PharIo\Version\Version; +use PharIo\Version\VersionConstraint; +use XMLWriter; + +class ManifestSerializer { + /** + * @var XMLWriter + */ + private $xmlWriter; + + public function serializeToFile(Manifest $manifest, $filename) { + file_put_contents( + $filename, + $this->serializeToString($manifest) + ); + } + + public function serializeToString(Manifest $manifest) { + $this->startDocument(); + + $this->addContains($manifest->getName(), $manifest->getVersion(), $manifest->getType()); + $this->addCopyright($manifest->getCopyrightInformation()); + $this->addRequirements($manifest->getRequirements()); + $this->addBundles($manifest->getBundledComponents()); + + return $this->finishDocument(); + } + + private function startDocument() { + $xmlWriter = new XMLWriter(); + $xmlWriter->openMemory(); + $xmlWriter->setIndent(true); + $xmlWriter->setIndentString(str_repeat(' ', 4)); + $xmlWriter->startDocument('1.0', 'UTF-8'); + $xmlWriter->startElement('phar'); + $xmlWriter->writeAttribute('xmlns', 'https://phar.io/xml/manifest/1.0'); + + $this->xmlWriter = $xmlWriter; + } + + private function finishDocument() { + $this->xmlWriter->endElement(); + $this->xmlWriter->endDocument(); + + return $this->xmlWriter->outputMemory(); + } + + private function addContains($name, Version $version, Type $type) { + $this->xmlWriter->startElement('contains'); + $this->xmlWriter->writeAttribute('name', $name); + $this->xmlWriter->writeAttribute('version', $version->getVersionString()); + + switch (true) { + case $type->isApplication(): { + $this->xmlWriter->writeAttribute('type', 'application'); + break; + } + + case $type->isLibrary(): { + $this->xmlWriter->writeAttribute('type', 'library'); + break; + } + + case $type->isExtension(): { + /* @var $type Extension */ + $this->xmlWriter->writeAttribute('type', 'extension'); + $this->addExtension($type->getApplicationName(), $type->getVersionConstraint()); + break; + } + + default: { + $this->xmlWriter->writeAttribute('type', 'custom'); + } + } + + $this->xmlWriter->endElement(); + } + + private function addCopyright(CopyrightInformation $copyrightInformation) { + $this->xmlWriter->startElement('copyright'); + + foreach($copyrightInformation->getAuthors() as $author) { + $this->xmlWriter->startElement('author'); + $this->xmlWriter->writeAttribute('name', $author->getName()); + $this->xmlWriter->writeAttribute('email', (string) $author->getEmail()); + $this->xmlWriter->endElement(); + } + + $license = $copyrightInformation->getLicense(); + + $this->xmlWriter->startElement('license'); + $this->xmlWriter->writeAttribute('type', $license->getName()); + $this->xmlWriter->writeAttribute('url', $license->getUrl()); + $this->xmlWriter->endElement(); + + $this->xmlWriter->endElement(); + } + + private function addRequirements(RequirementCollection $requirementCollection) { + $phpRequirement = new AnyVersionConstraint(); + $extensions = []; + + foreach($requirementCollection as $requirement) { + if ($requirement instanceof PhpVersionRequirement) { + $phpRequirement = $requirement->getVersionConstraint(); + continue; + } + + if ($requirement instanceof PhpExtensionRequirement) { + $extensions[] = (string) $requirement; + } + } + + $this->xmlWriter->startElement('requires'); + $this->xmlWriter->startElement('php'); + $this->xmlWriter->writeAttribute('version', $phpRequirement->asString()); + + foreach($extensions as $extension) { + $this->xmlWriter->startElement('ext'); + $this->xmlWriter->writeAttribute('name', $extension); + $this->xmlWriter->endElement(); + } + + $this->xmlWriter->endElement(); + $this->xmlWriter->endElement(); + } + + private function addBundles(BundledComponentCollection $bundledComponentCollection) { + if (count($bundledComponentCollection) === 0) { + return; + } + $this->xmlWriter->startElement('bundles'); + + foreach($bundledComponentCollection as $bundledComponent) { + $this->xmlWriter->startElement('component'); + $this->xmlWriter->writeAttribute('name', $bundledComponent->getName()); + $this->xmlWriter->writeAttribute('version', $bundledComponent->getVersion()->getVersionString()); + $this->xmlWriter->endElement(); + } + + $this->xmlWriter->endElement(); + } + + private function addExtension($application, VersionConstraint $versionConstraint) { + $this->xmlWriter->startElement('extension'); + $this->xmlWriter->writeAttribute('for', $application); + $this->xmlWriter->writeAttribute('compatible', $versionConstraint->asString()); + $this->xmlWriter->endElement(); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/Exception.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/Exception.php new file mode 100644 index 00000000..3ce46f24 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/Exception.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +interface Exception { +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php new file mode 100644 index 00000000..a53735a4 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php @@ -0,0 +1,16 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class InvalidApplicationNameException extends \InvalidArgumentException implements Exception { + const NotAString = 1; + const InvalidFormat = 2; +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php new file mode 100644 index 00000000..854399b2 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class InvalidEmailException extends \InvalidArgumentException implements Exception { +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php new file mode 100644 index 00000000..cdd83234 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class InvalidUrlException extends \InvalidArgumentException implements Exception { +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php new file mode 100644 index 00000000..8b40195e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php @@ -0,0 +1,6 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Application extends Type { + /** + * @return bool + */ + public function isApplication() { + return true; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/ApplicationName.php b/lib/composer/vendor/phar-io/manifest/src/values/ApplicationName.php new file mode 100644 index 00000000..1e71af48 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/ApplicationName.php @@ -0,0 +1,65 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ApplicationName { + /** + * @var string + */ + private $name; + + /** + * ApplicationName constructor. + * + * @param string $name + * + * @throws InvalidApplicationNameException + */ + public function __construct($name) { + $this->ensureIsString($name); + $this->ensureValidFormat($name); + $this->name = $name; + } + + /** + * @return string + */ + public function __toString() { + return $this->name; + } + + public function isEqual(ApplicationName $name) { + return $this->name === $name->name; + } + + /** + * @param string $name + * + * @throws InvalidApplicationNameException + */ + private function ensureValidFormat($name) { + if (!preg_match('#\w/\w#', $name)) { + throw new InvalidApplicationNameException( + sprintf('Format of name "%s" is not valid - expected: vendor/packagename', $name), + InvalidApplicationNameException::InvalidFormat + ); + } + } + + private function ensureIsString($name) { + if (!is_string($name)) { + throw new InvalidApplicationNameException( + 'Name must be a string', + InvalidApplicationNameException::NotAString + ); + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Author.php b/lib/composer/vendor/phar-io/manifest/src/values/Author.php new file mode 100644 index 00000000..8295f513 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Author.php @@ -0,0 +1,57 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Author { + /** + * @var string + */ + private $name; + + /** + * @var Email + */ + private $email; + + /** + * @param string $name + * @param Email $email + */ + public function __construct($name, Email $email) { + $this->name = $name; + $this->email = $email; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @return Email + */ + public function getEmail() { + return $this->email; + } + + /** + * @return string + */ + public function __toString() { + return sprintf( + '%s <%s>', + $this->name, + $this->email + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollection.php b/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollection.php new file mode 100644 index 00000000..d9158793 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollection.php @@ -0,0 +1,43 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class AuthorCollection implements \Countable, \IteratorAggregate { + /** + * @var Author[] + */ + private $authors = []; + + public function add(Author $author) { + $this->authors[] = $author; + } + + /** + * @return Author[] + */ + public function getAuthors() { + return $this->authors; + } + + /** + * @return int + */ + public function count() { + return count($this->authors); + } + + /** + * @return AuthorCollectionIterator + */ + public function getIterator() { + return new AuthorCollectionIterator($this); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php b/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php new file mode 100644 index 00000000..792a0502 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php @@ -0,0 +1,56 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class AuthorCollectionIterator implements \Iterator { + /** + * @var Author[] + */ + private $authors = []; + + /** + * @var int + */ + private $position; + + public function __construct(AuthorCollection $authors) { + $this->authors = $authors->getAuthors(); + } + + public function rewind() { + $this->position = 0; + } + + /** + * @return bool + */ + public function valid() { + return $this->position < count($this->authors); + } + + /** + * @return int + */ + public function key() { + return $this->position; + } + + /** + * @return Author + */ + public function current() { + return $this->authors[$this->position]; + } + + public function next() { + $this->position++; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/BundledComponent.php b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponent.php new file mode 100644 index 00000000..846d15a3 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponent.php @@ -0,0 +1,48 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; + +class BundledComponent { + /** + * @var string + */ + private $name; + + /** + * @var Version + */ + private $version; + + /** + * @param string $name + * @param Version $version + */ + public function __construct($name, Version $version) { + $this->name = $name; + $this->version = $version; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @return Version + */ + public function getVersion() { + return $this->version; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollection.php b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollection.php new file mode 100644 index 00000000..2dbb918c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollection.php @@ -0,0 +1,43 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class BundledComponentCollection implements \Countable, \IteratorAggregate { + /** + * @var BundledComponent[] + */ + private $bundledComponents = []; + + public function add(BundledComponent $bundledComponent) { + $this->bundledComponents[] = $bundledComponent; + } + + /** + * @return BundledComponent[] + */ + public function getBundledComponents() { + return $this->bundledComponents; + } + + /** + * @return int + */ + public function count() { + return count($this->bundledComponents); + } + + /** + * @return BundledComponentCollectionIterator + */ + public function getIterator() { + return new BundledComponentCollectionIterator($this); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php new file mode 100644 index 00000000..13b8f050 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php @@ -0,0 +1,56 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class BundledComponentCollectionIterator implements \Iterator { + /** + * @var BundledComponent[] + */ + private $bundledComponents = []; + + /** + * @var int + */ + private $position; + + public function __construct(BundledComponentCollection $bundledComponents) { + $this->bundledComponents = $bundledComponents->getBundledComponents(); + } + + public function rewind() { + $this->position = 0; + } + + /** + * @return bool + */ + public function valid() { + return $this->position < count($this->bundledComponents); + } + + /** + * @return int + */ + public function key() { + return $this->position; + } + + /** + * @return BundledComponent + */ + public function current() { + return $this->bundledComponents[$this->position]; + } + + public function next() { + $this->position++; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/CopyrightInformation.php b/lib/composer/vendor/phar-io/manifest/src/values/CopyrightInformation.php new file mode 100644 index 00000000..ece60b19 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/CopyrightInformation.php @@ -0,0 +1,42 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class CopyrightInformation { + /** + * @var AuthorCollection + */ + private $authors; + + /** + * @var License + */ + private $license; + + public function __construct(AuthorCollection $authors, License $license) { + $this->authors = $authors; + $this->license = $license; + } + + /** + * @return AuthorCollection + */ + public function getAuthors() { + return $this->authors; + } + + /** + * @return License + */ + public function getLicense() { + return $this->license; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Email.php b/lib/composer/vendor/phar-io/manifest/src/values/Email.php new file mode 100644 index 00000000..57cce042 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Email.php @@ -0,0 +1,47 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Email { + /** + * @var string + */ + private $email; + + /** + * @param string $email + * + * @throws InvalidEmailException + */ + public function __construct($email) { + $this->ensureEmailIsValid($email); + + $this->email = $email; + } + + /** + * @return string + */ + public function __toString() { + return $this->email; + } + + /** + * @param string $url + * + * @throws InvalidEmailException + */ + private function ensureEmailIsValid($url) { + if (filter_var($url, \FILTER_VALIDATE_EMAIL) === false) { + throw new InvalidEmailException; + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Extension.php b/lib/composer/vendor/phar-io/manifest/src/values/Extension.php new file mode 100644 index 00000000..90d6a6fd --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Extension.php @@ -0,0 +1,75 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PharIo\Version\VersionConstraint; + +class Extension extends Type { + /** + * @var ApplicationName + */ + private $application; + + /** + * @var VersionConstraint + */ + private $versionConstraint; + + /** + * @param ApplicationName $application + * @param VersionConstraint $versionConstraint + */ + public function __construct(ApplicationName $application, VersionConstraint $versionConstraint) { + $this->application = $application; + $this->versionConstraint = $versionConstraint; + } + + /** + * @return ApplicationName + */ + public function getApplicationName() { + return $this->application; + } + + /** + * @return VersionConstraint + */ + public function getVersionConstraint() { + return $this->versionConstraint; + } + + /** + * @return bool + */ + public function isExtension() { + return true; + } + + /** + * @param ApplicationName $name + * + * @return bool + */ + public function isExtensionFor(ApplicationName $name) { + return $this->application->isEqual($name); + } + + /** + * @param ApplicationName $name + * @param Version $version + * + * @return bool + */ + public function isCompatibleWith(ApplicationName $name, Version $version) { + return $this->isExtensionFor($name) && $this->versionConstraint->complies($version); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Library.php b/lib/composer/vendor/phar-io/manifest/src/values/Library.php new file mode 100644 index 00000000..a6ff9443 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Library.php @@ -0,0 +1,20 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Library extends Type { + /** + * @return bool + */ + public function isLibrary() { + return true; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/License.php b/lib/composer/vendor/phar-io/manifest/src/values/License.php new file mode 100644 index 00000000..e278670a --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/License.php @@ -0,0 +1,42 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class License { + /** + * @var string + */ + private $name; + + /** + * @var Url + */ + private $url; + + public function __construct($name, Url $url) { + $this->name = $name; + $this->url = $url; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @return Url + */ + public function getUrl() { + return $this->url; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Manifest.php b/lib/composer/vendor/phar-io/manifest/src/values/Manifest.php new file mode 100644 index 00000000..217acefc --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Manifest.php @@ -0,0 +1,138 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; + +class Manifest { + /** + * @var ApplicationName + */ + private $name; + + /** + * @var Version + */ + private $version; + + /** + * @var Type + */ + private $type; + + /** + * @var CopyrightInformation + */ + private $copyrightInformation; + + /** + * @var RequirementCollection + */ + private $requirements; + + /** + * @var BundledComponentCollection + */ + private $bundledComponents; + + public function __construct(ApplicationName $name, Version $version, Type $type, CopyrightInformation $copyrightInformation, RequirementCollection $requirements, BundledComponentCollection $bundledComponents) { + $this->name = $name; + $this->version = $version; + $this->type = $type; + $this->copyrightInformation = $copyrightInformation; + $this->requirements = $requirements; + $this->bundledComponents = $bundledComponents; + } + + /** + * @return ApplicationName + */ + public function getName() { + return $this->name; + } + + /** + * @return Version + */ + public function getVersion() { + return $this->version; + } + + /** + * @return Type + */ + public function getType() { + return $this->type; + } + + /** + * @return CopyrightInformation + */ + public function getCopyrightInformation() { + return $this->copyrightInformation; + } + + /** + * @return RequirementCollection + */ + public function getRequirements() { + return $this->requirements; + } + + /** + * @return BundledComponentCollection + */ + public function getBundledComponents() { + return $this->bundledComponents; + } + + /** + * @return bool + */ + public function isApplication() { + return $this->type->isApplication(); + } + + /** + * @return bool + */ + public function isLibrary() { + return $this->type->isLibrary(); + } + + /** + * @return bool + */ + public function isExtension() { + return $this->type->isExtension(); + } + + /** + * @param ApplicationName $application + * @param Version|null $version + * + * @return bool + */ + public function isExtensionFor(ApplicationName $application, Version $version = null) { + if (!$this->isExtension()) { + return false; + } + + /** @var Extension $type */ + $type = $this->type; + + if ($version !== null) { + return $type->isCompatibleWith($application, $version); + } + + return $type->isExtensionFor($application); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php b/lib/composer/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php new file mode 100644 index 00000000..6dd92968 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php @@ -0,0 +1,32 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class PhpExtensionRequirement implements Requirement { + /** + * @var string + */ + private $extension; + + /** + * @param string $extension + */ + public function __construct($extension) { + $this->extension = $extension; + } + + /** + * @return string + */ + public function __toString() { + return $this->extension; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php b/lib/composer/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php new file mode 100644 index 00000000..8ad3e769 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php @@ -0,0 +1,31 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\VersionConstraint; + +class PhpVersionRequirement implements Requirement { + /** + * @var VersionConstraint + */ + private $versionConstraint; + + public function __construct(VersionConstraint $versionConstraint) { + $this->versionConstraint = $versionConstraint; + } + + /** + * @return VersionConstraint + */ + public function getVersionConstraint() { + return $this->versionConstraint; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Requirement.php b/lib/composer/vendor/phar-io/manifest/src/values/Requirement.php new file mode 100644 index 00000000..03bb56d1 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Requirement.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +interface Requirement { +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollection.php b/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollection.php new file mode 100644 index 00000000..af0e09b8 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollection.php @@ -0,0 +1,43 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class RequirementCollection implements \Countable, \IteratorAggregate { + /** + * @var Requirement[] + */ + private $requirements = []; + + public function add(Requirement $requirement) { + $this->requirements[] = $requirement; + } + + /** + * @return Requirement[] + */ + public function getRequirements() { + return $this->requirements; + } + + /** + * @return int + */ + public function count() { + return count($this->requirements); + } + + /** + * @return RequirementCollectionIterator + */ + public function getIterator() { + return new RequirementCollectionIterator($this); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php b/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php new file mode 100644 index 00000000..9bb7003d --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php @@ -0,0 +1,56 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class RequirementCollectionIterator implements \Iterator { + /** + * @var Requirement[] + */ + private $requirements = []; + + /** + * @var int + */ + private $position; + + public function __construct(RequirementCollection $requirements) { + $this->requirements = $requirements->getRequirements(); + } + + public function rewind() { + $this->position = 0; + } + + /** + * @return bool + */ + public function valid() { + return $this->position < count($this->requirements); + } + + /** + * @return int + */ + public function key() { + return $this->position; + } + + /** + * @return Requirement + */ + public function current() { + return $this->requirements[$this->position]; + } + + public function next() { + $this->position++; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Type.php b/lib/composer/vendor/phar-io/manifest/src/values/Type.php new file mode 100644 index 00000000..31fbd440 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Type.php @@ -0,0 +1,60 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\VersionConstraint; + +abstract class Type { + /** + * @return Application + */ + public static function application() { + return new Application; + } + + /** + * @return Library + */ + public static function library() { + return new Library; + } + + /** + * @param ApplicationName $application + * @param VersionConstraint $versionConstraint + * + * @return Extension + */ + public static function extension(ApplicationName $application, VersionConstraint $versionConstraint) { + return new Extension($application, $versionConstraint); + } + + /** + * @return bool + */ + public function isApplication() { + return false; + } + + /** + * @return bool + */ + public function isLibrary() { + return false; + } + + /** + * @return bool + */ + public function isExtension() { + return false; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Url.php b/lib/composer/vendor/phar-io/manifest/src/values/Url.php new file mode 100644 index 00000000..37917c8c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Url.php @@ -0,0 +1,47 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Url { + /** + * @var string + */ + private $url; + + /** + * @param string $url + * + * @throws InvalidUrlException + */ + public function __construct($url) { + $this->ensureUrlIsValid($url); + + $this->url = $url; + } + + /** + * @return string + */ + public function __toString() { + return $this->url; + } + + /** + * @param string $url + * + * @throws InvalidUrlException + */ + private function ensureUrlIsValid($url) { + if (filter_var($url, \FILTER_VALIDATE_URL) === false) { + throw new InvalidUrlException; + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElement.php new file mode 100644 index 00000000..a32f3973 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElement.php @@ -0,0 +1,21 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class AuthorElement extends ManifestElement { + public function getName() { + return $this->getAttributeValue('name'); + } + + public function getEmail() { + return $this->getAttributeValue('email'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php b/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php new file mode 100644 index 00000000..1240d8c1 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php @@ -0,0 +1,19 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class AuthorElementCollection extends ElementCollection { + public function current() { + return new AuthorElement( + $this->getCurrentElement() + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/BundlesElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/BundlesElement.php new file mode 100644 index 00000000..b90023e4 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/BundlesElement.php @@ -0,0 +1,19 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class BundlesElement extends ManifestElement { + public function getComponentElements() { + return new ComponentElementCollection( + $this->getChildrenByName('component') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElement.php new file mode 100644 index 00000000..64ed6b0d --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElement.php @@ -0,0 +1,21 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ComponentElement extends ManifestElement { + public function getName() { + return $this->getAttributeValue('name'); + } + + public function getVersion() { + return $this->getAttributeValue('version'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php b/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php new file mode 100644 index 00000000..9d375f98 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php @@ -0,0 +1,19 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ComponentElementCollection extends ElementCollection { + public function current() { + return new ComponentElement( + $this->getCurrentElement() + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ContainsElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ContainsElement.php new file mode 100644 index 00000000..8172f334 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ContainsElement.php @@ -0,0 +1,31 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ContainsElement extends ManifestElement { + public function getName() { + return $this->getAttributeValue('name'); + } + + public function getVersion() { + return $this->getAttributeValue('version'); + } + + public function getType() { + return $this->getAttributeValue('type'); + } + + public function getExtensionElement() { + return new ExtensionElement( + $this->getChildByName('extension') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/CopyrightElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/CopyrightElement.php new file mode 100644 index 00000000..bf7848e4 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/CopyrightElement.php @@ -0,0 +1,25 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class CopyrightElement extends ManifestElement { + public function getAuthorElements() { + return new AuthorElementCollection( + $this->getChildrenByName('author') + ); + } + + public function getLicenseElement() { + return new LicenseElement( + $this->getChildByName('license') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ElementCollection.php b/lib/composer/vendor/phar-io/manifest/src/xml/ElementCollection.php new file mode 100644 index 00000000..284e77b6 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ElementCollection.php @@ -0,0 +1,58 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use DOMElement; +use DOMNodeList; + +abstract class ElementCollection implements \Iterator { + /** + * @var DOMNodeList + */ + private $nodeList; + + private $position; + + /** + * ElementCollection constructor. + * + * @param DOMNodeList $nodeList + */ + public function __construct(DOMNodeList $nodeList) { + $this->nodeList = $nodeList; + $this->position = 0; + } + + abstract public function current(); + + /** + * @return DOMElement + */ + protected function getCurrentElement() { + return $this->nodeList->item($this->position); + } + + public function next() { + $this->position++; + } + + public function key() { + return $this->position; + } + + public function valid() { + return $this->position < $this->nodeList->length; + } + + public function rewind() { + $this->position = 0; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ExtElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ExtElement.php new file mode 100644 index 00000000..7a824ab7 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ExtElement.php @@ -0,0 +1,17 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ExtElement extends ManifestElement { + public function getName() { + return $this->getAttributeValue('name'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ExtElementCollection.php b/lib/composer/vendor/phar-io/manifest/src/xml/ExtElementCollection.php new file mode 100644 index 00000000..17acc62a --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ExtElementCollection.php @@ -0,0 +1,20 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ExtElementCollection extends ElementCollection { + public function current() { + return new ExtElement( + $this->getCurrentElement() + ); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ExtensionElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ExtensionElement.php new file mode 100644 index 00000000..536c085c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ExtensionElement.php @@ -0,0 +1,21 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ExtensionElement extends ManifestElement { + public function getFor() { + return $this->getAttributeValue('for'); + } + + public function getCompatible() { + return $this->getAttributeValue('compatible'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/LicenseElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/LicenseElement.php new file mode 100644 index 00000000..ee001dfa --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/LicenseElement.php @@ -0,0 +1,21 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class LicenseElement extends ManifestElement { + public function getType() { + return $this->getAttributeValue('type'); + } + + public function getUrl() { + return $this->getAttributeValue('url'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocument.php b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocument.php new file mode 100644 index 00000000..9b0bd9d9 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocument.php @@ -0,0 +1,118 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use DOMDocument; +use DOMElement; + +class ManifestDocument { + const XMLNS = 'https://phar.io/xml/manifest/1.0'; + + /** + * @var DOMDocument + */ + private $dom; + + /** + * ManifestDocument constructor. + * + * @param DOMDocument $dom + */ + private function __construct(DOMDocument $dom) { + $this->ensureCorrectDocumentType($dom); + + $this->dom = $dom; + } + + public static function fromFile($filename) { + if (!file_exists($filename)) { + throw new ManifestDocumentException( + sprintf('File "%s" not found', $filename) + ); + } + + return self::fromString( + file_get_contents($filename) + ); + } + + public static function fromString($xmlString) { + $prev = libxml_use_internal_errors(true); + libxml_clear_errors(); + + $dom = new DOMDocument(); + $dom->loadXML($xmlString); + + $errors = libxml_get_errors(); + libxml_use_internal_errors($prev); + + if (count($errors) !== 0) { + throw new ManifestDocumentLoadingException($errors); + } + + return new self($dom); + } + + public function getContainsElement() { + return new ContainsElement( + $this->fetchElementByName('contains') + ); + } + + public function getCopyrightElement() { + return new CopyrightElement( + $this->fetchElementByName('copyright') + ); + } + + public function getRequiresElement() { + return new RequiresElement( + $this->fetchElementByName('requires') + ); + } + + public function hasBundlesElement() { + return $this->dom->getElementsByTagNameNS(self::XMLNS, 'bundles')->length === 1; + } + + public function getBundlesElement() { + return new BundlesElement( + $this->fetchElementByName('bundles') + ); + } + + private function ensureCorrectDocumentType(DOMDocument $dom) { + $root = $dom->documentElement; + + if ($root->localName !== 'phar' || $root->namespaceURI !== self::XMLNS) { + throw new ManifestDocumentException('Not a phar.io manifest document'); + } + } + + /** + * @param $elementName + * + * @return DOMElement + * + * @throws ManifestDocumentException + */ + private function fetchElementByName($elementName) { + $element = $this->dom->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); + + if (!$element instanceof DOMElement) { + throw new ManifestDocumentException( + sprintf('Element %s missing', $elementName) + ); + } + + return $element; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php new file mode 100644 index 00000000..59ac5c69 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php @@ -0,0 +1,48 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use LibXMLError; + +class ManifestDocumentLoadingException extends \Exception implements Exception { + /** + * @var LibXMLError[] + */ + private $libxmlErrors; + + /** + * ManifestDocumentLoadingException constructor. + * + * @param LibXMLError[] $libxmlErrors + */ + public function __construct(array $libxmlErrors) { + $this->libxmlErrors = $libxmlErrors; + $first = $this->libxmlErrors[0]; + + parent::__construct( + sprintf( + '%s (Line: %d / Column: %d / File: %s)', + $first->message, + $first->line, + $first->column, + $first->file + ), + $first->code + ); + } + + /** + * @return LibXMLError[] + */ + public function getLibxmlErrors() { + return $this->libxmlErrors; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ManifestElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestElement.php new file mode 100644 index 00000000..09d07ccf --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestElement.php @@ -0,0 +1,100 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use DOMElement; +use DOMNodeList; + +class ManifestElement { + const XMLNS = 'https://phar.io/xml/manifest/1.0'; + + /** + * @var DOMElement + */ + private $element; + + /** + * ContainsElement constructor. + * + * @param DOMElement $element + */ + public function __construct(DOMElement $element) { + $this->element = $element; + } + + /** + * @param string $name + * + * @return string + * + * @throws ManifestElementException + */ + protected function getAttributeValue($name) { + if (!$this->element->hasAttribute($name)) { + throw new ManifestElementException( + sprintf( + 'Attribute %s not set on element %s', + $name, + $this->element->localName + ) + ); + } + + return $this->element->getAttribute($name); + } + + /** + * @param $elementName + * + * @return DOMElement + * + * @throws ManifestElementException + */ + protected function getChildByName($elementName) { + $element = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); + + if (!$element instanceof DOMElement) { + throw new ManifestElementException( + sprintf('Element %s missing', $elementName) + ); + } + + return $element; + } + + /** + * @param $elementName + * + * @return DOMNodeList + * + * @throws ManifestElementException + */ + protected function getChildrenByName($elementName) { + $elementList = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName); + + if ($elementList->length === 0) { + throw new ManifestElementException( + sprintf('Element(s) %s missing', $elementName) + ); + } + + return $elementList; + } + + /** + * @param string $elementName + * + * @return bool + */ + protected function hasChild($elementName) { + return $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->length !== 0; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/PhpElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/PhpElement.php new file mode 100644 index 00000000..e7340c0d --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/PhpElement.php @@ -0,0 +1,27 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class PhpElement extends ManifestElement { + public function getVersion() { + return $this->getAttributeValue('version'); + } + + public function hasExtElements() { + return $this->hasChild('ext'); + } + + public function getExtElements() { + return new ExtElementCollection( + $this->getChildrenByName('ext') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/RequiresElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/RequiresElement.php new file mode 100644 index 00000000..5f41b2eb --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/RequiresElement.php @@ -0,0 +1,19 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class RequiresElement extends ManifestElement { + public function getPHPElement() { + return new PhpElement( + $this->getChildByName('php') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/ManifestDocumentMapperTest.php b/lib/composer/vendor/phar-io/manifest/tests/ManifestDocumentMapperTest.php new file mode 100644 index 00000000..e2612317 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/ManifestDocumentMapperTest.php @@ -0,0 +1,110 @@ +assertInstanceOf( + Manifest::class, + $mapper->map($manifestDocument) + ); + } + + public function dataProvider() { + return [ + 'application' => [__DIR__ . '/_fixture/phpunit-5.6.5.xml'], + 'library' => [__DIR__ . '/_fixture/library.xml'], + 'extension' => [__DIR__ . '/_fixture/extension.xml'] + ]; + } + + public function testThrowsExceptionOnUnsupportedType() { + $manifestDocument = ManifestDocument::fromFile(__DIR__ . '/_fixture/custom.xml'); + $mapper = new ManifestDocumentMapper(); + + $this->expectException(ManifestDocumentMapperException::class); + $mapper->map($manifestDocument); + } + + public function testInvalidVersionInformationThrowsException() { + $manifestDocument = ManifestDocument::fromFile(__DIR__ . '/_fixture/invalidversion.xml'); + $mapper = new ManifestDocumentMapper(); + + $this->expectException(ManifestDocumentMapperException::class); + $mapper->map($manifestDocument); + } + + public function testInvalidVersionConstraintThrowsException() { + $manifestDocument = ManifestDocument::fromFile(__DIR__ . '/_fixture/invalidversionconstraint.xml'); + $mapper = new ManifestDocumentMapper(); + + $this->expectException(ManifestDocumentMapperException::class); + $mapper->map($manifestDocument); + } + + /** + * @uses \PharIo\Manifest\ExtensionElement + */ + public function testInvalidCompatibleConstraintThrowsException() { + $manifestDocument = ManifestDocument::fromFile(__DIR__ . '/_fixture/extension-invalidcompatible.xml'); + $mapper = new ManifestDocumentMapper(); + + $this->expectException(ManifestDocumentMapperException::class); + $mapper->map($manifestDocument); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/ManifestLoaderTest.php b/lib/composer/vendor/phar-io/manifest/tests/ManifestLoaderTest.php new file mode 100644 index 00000000..73b682ef --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/ManifestLoaderTest.php @@ -0,0 +1,83 @@ +assertInstanceOf( + Manifest::class, + ManifestLoader::fromFile(__DIR__ . '/_fixture/library.xml') + ); + } + + public function testCanBeLoadedFromString() { + $this->assertInstanceOf( + Manifest::class, + ManifestLoader::fromString( + file_get_contents(__DIR__ . '/_fixture/library.xml') + ) + ); + } + + public function testCanBeLoadedFromPhar() { + $this->assertInstanceOf( + Manifest::class, + ManifestLoader::fromPhar(__DIR__ . '/_fixture/test.phar') + ); + + } + + public function testLoadingNonExistingFileThrowsException() { + $this->expectException(ManifestLoaderException::class); + ManifestLoader::fromFile('/not/existing'); + } + + /** + * @uses \PharIo\Manifest\ManifestDocumentLoadingException + */ + public function testLoadingInvalidXmlThrowsException() { + $this->expectException(ManifestLoaderException::class); + ManifestLoader::fromString(''); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/ManifestSerializerTest.php b/lib/composer/vendor/phar-io/manifest/tests/ManifestSerializerTest.php new file mode 100644 index 00000000..4433020a --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/ManifestSerializerTest.php @@ -0,0 +1,114 @@ +assertXmlStringEqualsXmlString( + $expected, + $serializer->serializeToString($manifest) + ); + } + + public function dataProvider() { + return [ + 'application' => [file_get_contents(__DIR__ . '/_fixture/phpunit-5.6.5.xml')], + 'library' => [file_get_contents(__DIR__ . '/_fixture/library.xml')], + 'extension' => [file_get_contents(__DIR__ . '/_fixture/extension.xml')] + ]; + } + + /** + * @uses \PharIo\Manifest\Library + * @uses \PharIo\Manifest\ApplicationName + */ + public function testCanSerializeToFile() { + $src = __DIR__ . '/_fixture/library.xml'; + $dest = '/tmp/' . uniqid('serializer', true); + $manifest = ManifestLoader::fromFile($src); + $serializer = new ManifestSerializer(); + $serializer->serializeToFile($manifest, $dest); + $this->assertXmlFileEqualsXmlFile($src, $dest); + unlink($dest); + } + + /** + * @uses \PharIo\Manifest\ApplicationName + */ + public function testCanHandleUnknownType() { + $type = $this->getMockForAbstractClass(Type::class); + $manifest = new Manifest( + new ApplicationName('testvendor/testname'), + new Version('1.0.0'), + $type, + new CopyrightInformation( + new AuthorCollection(), + new License('bsd-3', new Url('https://some/uri')) + ), + new RequirementCollection(), + new BundledComponentCollection() + ); + + $serializer = new ManifestSerializer(); + $this->assertXmlStringEqualsXmlFile( + __DIR__ . '/_fixture/custom.xml', + $serializer->serializeToString($manifest) + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/custom.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/custom.xml new file mode 100644 index 00000000..4f438280 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/custom.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension-invalidcompatible.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension-invalidcompatible.xml new file mode 100644 index 00000000..a78111c1 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension-invalidcompatible.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension.xml new file mode 100644 index 00000000..a870aee8 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversion.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversion.xml new file mode 100644 index 00000000..788dd4cd --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversion.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversionconstraint.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversionconstraint.xml new file mode 100644 index 00000000..f881f8b0 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversionconstraint.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/library.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/library.xml new file mode 100644 index 00000000..a5e25237 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/library.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/manifest.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/manifest.xml new file mode 100644 index 00000000..a5e25237 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/manifest.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/phpunit-5.6.5.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/phpunit-5.6.5.xml new file mode 100644 index 00000000..aadbea2f --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/phpunit-5.6.5.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/test.phar b/lib/composer/vendor/phar-io/manifest/tests/_fixture/test.phar new file mode 100644 index 0000000000000000000000000000000000000000..d2a3e393ea403e5989aafa4b77d6ae6f07aafe75 GIT binary patch literal 7165 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 literal 0 HcmV?d00001 diff --git a/lib/composer/vendor/phar-io/manifest/tests/exceptions/ManifestDocumentLoadingExceptionTest.php b/lib/composer/vendor/phar-io/manifest/tests/exceptions/ManifestDocumentLoadingExceptionTest.php new file mode 100644 index 00000000..d87e84ea --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/exceptions/ManifestDocumentLoadingExceptionTest.php @@ -0,0 +1,19 @@ +loadXML(''); + $exception = new ManifestDocumentLoadingException(libxml_get_errors()); + libxml_use_internal_errors($prev); + + $this->assertContainsOnlyInstancesOf(LibXMLError::class, $exception->getLibxmlErrors()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationNameTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationNameTest.php new file mode 100644 index 00000000..c9594157 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationNameTest.php @@ -0,0 +1,48 @@ +assertInstanceOf( + ApplicationName::class, + new ApplicationName('foo/bar') + ); + } + + public function testUsingInvalidFormatForNameThrowsException() { + $this->expectException(InvalidApplicationNameException::class); + $this->expectExceptionCode(InvalidApplicationNameException::InvalidFormat); + new ApplicationName('foo'); + } + + public function testUsingWrongTypeForNameThrowsException() { + $this->expectException(InvalidApplicationNameException::class); + $this->expectExceptionCode(InvalidApplicationNameException::NotAString); + new ApplicationName(123); + } + + public function testReturnsTrueForEqualNamesWhenCompared() { + $app = new ApplicationName('foo/bar'); + $this->assertTrue( + $app->isEqual($app) + ); + } + + public function testReturnsFalseForNonEqualNamesWhenCompared() { + $app1 = new ApplicationName('foo/bar'); + $app2 = new ApplicationName('foo/foo'); + $this->assertFalse( + $app1->isEqual($app2) + ); + } + + public function testCanBeConvertedToString() { + $this->assertEquals( + 'foo/bar', + new ApplicationName('foo/bar') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationTest.php new file mode 100644 index 00000000..86b5da64 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationTest.php @@ -0,0 +1,44 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Application + * @covers PharIo\Manifest\Type + */ +class ApplicationTest extends TestCase { + /** + * @var Application + */ + private $type; + + protected function setUp() { + $this->type = Type::application(); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Application::class, $this->type); + } + + public function testIsApplication() { + $this->assertTrue($this->type->isApplication()); + } + + public function testIsNotLibrary() { + $this->assertFalse($this->type->isLibrary()); + } + + public function testIsNotExtension() { + $this->assertFalse($this->type->isExtension()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/AuthorCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/AuthorCollectionTest.php new file mode 100644 index 00000000..0fa1b950 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/AuthorCollectionTest.php @@ -0,0 +1,62 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\AuthorCollection + * @covers \PharIo\Manifest\AuthorCollectionIterator + * + * @uses \PharIo\Manifest\Author + * @uses \PharIo\Manifest\Email + */ +class AuthorCollectionTest extends TestCase { + /** + * @var AuthorCollection + */ + private $collection; + + /** + * @var Author + */ + private $item; + + protected function setUp() { + $this->collection = new AuthorCollection; + $this->item = new Author('Joe Developer', new Email('user@example.com')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(AuthorCollection::class, $this->collection); + } + + public function testCanBeCounted() { + $this->collection->add($this->item); + + $this->assertCount(1, $this->collection); + } + + public function testCanBeIterated() { + $this->collection->add( + new Author('Dummy First', new Email('dummy@example.com')) + ); + $this->collection->add($this->item); + $this->assertContains($this->item, $this->collection); + } + + public function testKeyPositionCanBeRetreived() { + $this->collection->add($this->item); + foreach($this->collection as $key => $item) { + $this->assertEquals(0, $key); + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/AuthorTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/AuthorTest.php new file mode 100644 index 00000000..b7317fab --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/AuthorTest.php @@ -0,0 +1,45 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Author + * + * @uses PharIo\Manifest\Email + */ +class AuthorTest extends TestCase { + /** + * @var Author + */ + private $author; + + protected function setUp() { + $this->author = new Author('Joe Developer', new Email('user@example.com')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Author::class, $this->author); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('Joe Developer', $this->author->getName()); + } + + public function testEmailCanBeRetrieved() { + $this->assertEquals('user@example.com', $this->author->getEmail()); + } + + public function testCanBeUsedAsString() { + $this->assertEquals('Joe Developer ', $this->author); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentCollectionTest.php new file mode 100644 index 00000000..66cd0c4c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentCollectionTest.php @@ -0,0 +1,63 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\BundledComponentCollection + * @covers \PharIo\Manifest\BundledComponentCollectionIterator + * + * @uses \PharIo\Manifest\BundledComponent + * @uses \PharIo\Version\Version + */ +class BundledComponentCollectionTest extends TestCase { + /** + * @var BundledComponentCollection + */ + private $collection; + + /** + * @var BundledComponent + */ + private $item; + + protected function setUp() { + $this->collection = new BundledComponentCollection; + $this->item = new BundledComponent('phpunit/php-code-coverage', new Version('4.0.2')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(BundledComponentCollection::class, $this->collection); + } + + public function testCanBeCounted() { + $this->collection->add($this->item); + + $this->assertCount(1, $this->collection); + } + + public function testCanBeIterated() { + $this->collection->add($this->createMock(BundledComponent::class)); + $this->collection->add($this->item); + + $this->assertContains($this->item, $this->collection); + } + + public function testKeyPositionCanBeRetreived() { + $this->collection->add($this->item); + foreach($this->collection as $key => $item) { + $this->assertEquals(0, $key); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentTest.php new file mode 100644 index 00000000..01b8e13e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentTest.php @@ -0,0 +1,42 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\BundledComponent + * + * @uses \PharIo\Version\Version + */ +class BundledComponentTest extends TestCase { + /** + * @var BundledComponent + */ + private $bundledComponent; + + protected function setUp() { + $this->bundledComponent = new BundledComponent('phpunit/php-code-coverage', new Version('4.0.2')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(BundledComponent::class, $this->bundledComponent); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('phpunit/php-code-coverage', $this->bundledComponent->getName()); + } + + public function testVersionCanBeRetrieved() { + $this->assertEquals('4.0.2', $this->bundledComponent->getVersion()->getVersionString()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/CopyrightInformationTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/CopyrightInformationTest.php new file mode 100644 index 00000000..de738f48 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/CopyrightInformationTest.php @@ -0,0 +1,62 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\CopyrightInformation + * + * @uses PharIo\Manifest\AuthorCollection + * @uses PharIo\Manifest\AuthorCollectionIterator + * @uses PharIo\Manifest\Author + * @uses PharIo\Manifest\Email + * @uses PharIo\Manifest\License + * @uses PharIo\Manifest\Url + */ +class CopyrightInformationTest extends TestCase { + /** + * @var CopyrightInformation + */ + private $copyrightInformation; + + /** + * @var Author + */ + private $author; + + /** + * @var License + */ + private $license; + + protected function setUp() { + $this->author = new Author('Joe Developer', new Email('user@example.com')); + $this->license = new License('BSD-3-Clause', new Url('https://github.com/sebastianbergmann/phpunit/blob/master/LICENSE')); + + $authors = new AuthorCollection; + $authors->add($this->author); + + $this->copyrightInformation = new CopyrightInformation($authors, $this->license); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(CopyrightInformation::class, $this->copyrightInformation); + } + + public function testAuthorsCanBeRetrieved() { + $this->assertContains($this->author, $this->copyrightInformation->getAuthors()); + } + + public function testLicenseCanBeRetrieved() { + $this->assertEquals($this->license, $this->copyrightInformation->getLicense()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/EmailTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/EmailTest.php new file mode 100644 index 00000000..ee38531f --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/EmailTest.php @@ -0,0 +1,35 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Email + */ +class EmailTest extends TestCase { + public function testCanBeCreatedForValidEmail() { + $this->assertInstanceOf(Email::class, new Email('user@example.com')); + } + + public function testCanBeUsedAsString() { + $this->assertEquals('user@example.com', new Email('user@example.com')); + } + + /** + * @covers PharIo\Manifest\InvalidEmailException + */ + public function testCannotBeCreatedForInvalidEmail() { + $this->expectException(InvalidEmailException::class); + + new Email('invalid'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/ExtensionTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/ExtensionTest.php new file mode 100644 index 00000000..1c9d676f --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/ExtensionTest.php @@ -0,0 +1,109 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\AnyVersionConstraint; +use PharIo\Version\Version; +use PharIo\Version\VersionConstraint; +use PharIo\Version\VersionConstraintParser; +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\Extension + * @covers \PharIo\Manifest\Type + * + * @uses \PharIo\Version\VersionConstraint + * @uses \PharIo\Manifest\ApplicationName + */ +class ExtensionTest extends TestCase { + /** + * @var Extension + */ + private $type; + + /** + * @var ApplicationName|\PHPUnit_Framework_MockObject_MockObject + */ + private $name; + + protected function setUp() { + $this->name = $this->createMock(ApplicationName::class); + $this->type = Type::extension($this->name, new AnyVersionConstraint); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Extension::class, $this->type); + } + + public function testIsNotApplication() { + $this->assertFalse($this->type->isApplication()); + } + + public function testIsNotLibrary() { + $this->assertFalse($this->type->isLibrary()); + } + + public function testIsExtension() { + $this->assertTrue($this->type->isExtension()); + } + + public function testApplicationCanBeRetrieved() + { + $this->assertInstanceOf(ApplicationName::class, $this->type->getApplicationName()); + } + + public function testVersionConstraintCanBeRetrieved() { + $this->assertInstanceOf( + VersionConstraint::class, + $this->type->getVersionConstraint() + ); + } + + public function testApplicationCanBeQueried() + { + $this->name->method('isEqual')->willReturn(true); + $this->assertTrue( + $this->type->isExtensionFor($this->createMock(ApplicationName::class)) + ); + } + + public function testCompatibleWithReturnsTrueForMatchingVersionConstraintAndApplicaiton() { + $app = new ApplicationName('foo/bar'); + $extension = Type::extension($app, (new VersionConstraintParser)->parse('^1.0')); + $version = new Version('1.0.0'); + + $this->assertTrue( + $extension->isCompatibleWith($app, $version) + ); + } + + public function testCompatibleWithReturnsFalseForNotMatchingVersionConstraint() { + $app = new ApplicationName('foo/bar'); + $extension = Type::extension($app, (new VersionConstraintParser)->parse('^1.0')); + $version = new Version('2.0.0'); + + $this->assertFalse( + $extension->isCompatibleWith($app, $version) + ); + } + + public function testCompatibleWithReturnsFalseForNotMatchingApplication() { + $app1 = new ApplicationName('foo/bar'); + $app2 = new ApplicationName('foo/foo'); + $extension = Type::extension($app1, (new VersionConstraintParser)->parse('^1.0')); + $version = new Version('1.0.0'); + + $this->assertFalse( + $extension->isCompatibleWith($app2, $version) + ); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/LibraryTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/LibraryTest.php new file mode 100644 index 00000000..f8d1c649 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/LibraryTest.php @@ -0,0 +1,44 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Library + * @covers PharIo\Manifest\Type + */ +class LibraryTest extends TestCase { + /** + * @var Library + */ + private $type; + + protected function setUp() { + $this->type = Type::library(); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Library::class, $this->type); + } + + public function testIsNotApplication() { + $this->assertFalse($this->type->isApplication()); + } + + public function testIsLibrary() { + $this->assertTrue($this->type->isLibrary()); + } + + public function testIsNotExtension() { + $this->assertFalse($this->type->isExtension()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/LicenseTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/LicenseTest.php new file mode 100644 index 00000000..c9c5c3c7 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/LicenseTest.php @@ -0,0 +1,41 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\License + * + * @uses PharIo\Manifest\Url + */ +class LicenseTest extends TestCase { + /** + * @var License + */ + private $license; + + protected function setUp() { + $this->license = new License('BSD-3-Clause', new Url('https://github.com/sebastianbergmann/phpunit/blob/master/LICENSE')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(License::class, $this->license); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('BSD-3-Clause', $this->license->getName()); + } + + public function testUrlCanBeRetrieved() { + $this->assertEquals('https://github.com/sebastianbergmann/phpunit/blob/master/LICENSE', $this->license->getUrl()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/ManifestTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/ManifestTest.php new file mode 100644 index 00000000..cff0a682 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/ManifestTest.php @@ -0,0 +1,187 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PharIo\Version\AnyVersionConstraint; +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\Manifest + * + * @uses \PharIo\Manifest\ApplicationName + * @uses \PharIo\Manifest\Author + * @uses \PharIo\Manifest\AuthorCollection + * @uses \PharIo\Manifest\BundledComponent + * @uses \PharIo\Manifest\BundledComponentCollection + * @uses \PharIo\Manifest\CopyrightInformation + * @uses \PharIo\Manifest\Email + * @uses \PharIo\Manifest\License + * @uses \PharIo\Manifest\RequirementCollection + * @uses \PharIo\Manifest\PhpVersionRequirement + * @uses \PharIo\Manifest\Type + * @uses \PharIo\Manifest\Application + * @uses \PharIo\Manifest\Url + * @uses \PharIo\Version\Version + * @uses \PharIo\Version\VersionConstraint + */ +class ManifestTest extends TestCase { + /** + * @var ApplicationName + */ + private $name; + + /** + * @var Version + */ + private $version; + + /** + * @var Type + */ + private $type; + + /** + * @var CopyrightInformation + */ + private $copyrightInformation; + + /** + * @var RequirementCollection + */ + private $requirements; + + /** + * @var BundledComponentCollection + */ + private $bundledComponents; + + /** + * @var Manifest + */ + private $manifest; + + protected function setUp() { + $this->version = new Version('5.6.5'); + + $this->type = Type::application(); + + $author = new Author('Joe Developer', new Email('user@example.com')); + $license = new License('BSD-3-Clause', new Url('https://github.com/sebastianbergmann/phpunit/blob/master/LICENSE')); + + $authors = new AuthorCollection; + $authors->add($author); + + $this->copyrightInformation = new CopyrightInformation($authors, $license); + + $this->requirements = new RequirementCollection; + $this->requirements->add(new PhpVersionRequirement(new AnyVersionConstraint)); + + $this->bundledComponents = new BundledComponentCollection; + $this->bundledComponents->add(new BundledComponent('phpunit/php-code-coverage', new Version('4.0.2'))); + + $this->name = new ApplicationName('phpunit/phpunit'); + + $this->manifest = new Manifest( + $this->name, + $this->version, + $this->type, + $this->copyrightInformation, + $this->requirements, + $this->bundledComponents + ); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Manifest::class, $this->manifest); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals($this->name, $this->manifest->getName()); + } + + public function testVersionCanBeRetrieved() { + $this->assertEquals($this->version, $this->manifest->getVersion()); + } + + public function testTypeCanBeRetrieved() { + $this->assertEquals($this->type, $this->manifest->getType()); + } + + public function testTypeCanBeQueried() { + $this->assertTrue($this->manifest->isApplication()); + $this->assertFalse($this->manifest->isLibrary()); + $this->assertFalse($this->manifest->isExtension()); + } + + public function testCopyrightInformationCanBeRetrieved() { + $this->assertEquals($this->copyrightInformation, $this->manifest->getCopyrightInformation()); + } + + public function testRequirementsCanBeRetrieved() { + $this->assertEquals($this->requirements, $this->manifest->getRequirements()); + } + + public function testBundledComponentsCanBeRetrieved() { + $this->assertEquals($this->bundledComponents, $this->manifest->getBundledComponents()); + } + + /** + * @uses \PharIo\Manifest\Extension + */ + public function testExtendedApplicationCanBeQueriedForExtension() + { + $appName = new ApplicationName('foo/bar'); + $manifest = new Manifest( + new ApplicationName('foo/foo'), + new Version('1.0.0'), + Type::extension($appName, new AnyVersionConstraint), + $this->copyrightInformation, + new RequirementCollection, + new BundledComponentCollection + ); + + $this->assertTrue($manifest->isExtensionFor($appName)); + } + + public function testNonExtensionReturnsFalseWhenQueriesForExtension() { + $appName = new ApplicationName('foo/bar'); + $manifest = new Manifest( + new ApplicationName('foo/foo'), + new Version('1.0.0'), + Type::library(), + $this->copyrightInformation, + new RequirementCollection, + new BundledComponentCollection + ); + + $this->assertFalse($manifest->isExtensionFor($appName)); + } + + /** + * @uses \PharIo\Manifest\Extension + */ + public function testExtendedApplicationCanBeQueriedForExtensionWithVersion() + { + $appName = new ApplicationName('foo/bar'); + $manifest = new Manifest( + new ApplicationName('foo/foo'), + new Version('1.0.0'), + Type::extension($appName, new AnyVersionConstraint), + $this->copyrightInformation, + new RequirementCollection, + new BundledComponentCollection + ); + + $this->assertTrue($manifest->isExtensionFor($appName, new Version('1.2.3'))); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/PhpExtensionRequirementTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/PhpExtensionRequirementTest.php new file mode 100644 index 00000000..ae1c058f --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/PhpExtensionRequirementTest.php @@ -0,0 +1,26 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\PhpExtensionRequirement + */ +class PhpExtensionRequirementTest extends TestCase { + public function testCanBeCreated() { + $this->assertInstanceOf(PhpExtensionRequirement::class, new PhpExtensionRequirement('dom')); + } + + public function testCanBeUsedAsString() { + $this->assertEquals('dom', new PhpExtensionRequirement('dom')); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/PhpVersionRequirementTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/PhpVersionRequirementTest.php new file mode 100644 index 00000000..67ac41ad --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/PhpVersionRequirementTest.php @@ -0,0 +1,38 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\ExactVersionConstraint; +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\PhpVersionRequirement + * + * @uses \PharIo\Version\VersionConstraint + */ +class PhpVersionRequirementTest extends TestCase { + /** + * @var PhpVersionRequirement + */ + private $requirement; + + protected function setUp() { + $this->requirement = new PhpVersionRequirement(new ExactVersionConstraint('7.1.0')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(PhpVersionRequirement::class, $this->requirement); + } + + public function testVersionConstraintCanBeRetrieved() { + $this->assertEquals('7.1.0', $this->requirement->getVersionConstraint()->asString()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/RequirementCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/RequirementCollectionTest.php new file mode 100644 index 00000000..2afeb1a3 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/RequirementCollectionTest.php @@ -0,0 +1,63 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\ExactVersionConstraint; +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\RequirementCollection + * @covers \PharIo\Manifest\RequirementCollectionIterator + * + * @uses \PharIo\Manifest\PhpVersionRequirement + * @uses \PharIo\Version\VersionConstraint + */ +class RequirementCollectionTest extends TestCase { + /** + * @var RequirementCollection + */ + private $collection; + + /** + * @var Requirement + */ + private $item; + + protected function setUp() { + $this->collection = new RequirementCollection; + $this->item = new PhpVersionRequirement(new ExactVersionConstraint('7.1.0')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(RequirementCollection::class, $this->collection); + } + + public function testCanBeCounted() { + $this->collection->add($this->item); + + $this->assertCount(1, $this->collection); + } + + public function testCanBeIterated() { + $this->collection->add(new PhpVersionRequirement(new ExactVersionConstraint('5.6.0'))); + $this->collection->add($this->item); + + $this->assertContains($this->item, $this->collection); + } + + public function testKeyPositionCanBeRetreived() { + $this->collection->add($this->item); + foreach($this->collection as $key => $item) { + $this->assertEquals(0, $key); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/UrlTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/UrlTest.php new file mode 100644 index 00000000..20f09c15 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/UrlTest.php @@ -0,0 +1,35 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Url + */ +class UrlTest extends TestCase { + public function testCanBeCreatedForValidUrl() { + $this->assertInstanceOf(Url::class, new Url('https://phar.io/')); + } + + public function testCanBeUsedAsString() { + $this->assertEquals('https://phar.io/', new Url('https://phar.io/')); + } + + /** + * @covers PharIo\Manifest\InvalidUrlException + */ + public function testCannotBeCreatedForInvalidUrl() { + $this->expectException(InvalidUrlException::class); + + new Url('invalid'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementCollectionTest.php new file mode 100644 index 00000000..327a7e3f --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementCollectionTest.php @@ -0,0 +1,18 @@ +loadXML(''); + $collection = new AuthorElementCollection($dom->childNodes); + + foreach($collection as $authorElement) { + $this->assertInstanceOf(AuthorElement::class, $authorElement); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementTest.php new file mode 100644 index 00000000..430c0caa --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementTest.php @@ -0,0 +1,25 @@ +loadXML(''); + $this->author = new AuthorElement($dom->documentElement); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('Reiner Zufall', $this->author->getName()); + } + + public function testEmailCanBeRetrieved() { + $this->assertEquals('reiner@zufall.de', $this->author->getEmail()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/BundlesElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/BundlesElementTest.php new file mode 100644 index 00000000..79726176 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/BundlesElementTest.php @@ -0,0 +1,41 @@ +dom = new DOMDocument(); + $this->dom->loadXML(''); + $this->bundles = new BundlesElement($this->dom->documentElement); + } + + public function testThrowsExceptionWhenGetComponentElementsIsCalledButNodesAreMissing() { + $this->expectException(ManifestElementException::class); + $this->bundles->getComponentElements(); + } + + public function testGetComponentElementsReturnsComponentElementCollection() { + $this->addComponent(); + $this->assertInstanceOf( + ComponentElementCollection::class, $this->bundles->getComponentElements() + ); + } + + private function addComponent() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'component') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementCollectionTest.php new file mode 100644 index 00000000..3a2716f8 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementCollectionTest.php @@ -0,0 +1,18 @@ +loadXML(''); + $collection = new ComponentElementCollection($dom->childNodes); + + foreach($collection as $componentElement) { + $this->assertInstanceOf(ComponentElement::class, $componentElement); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementTest.php new file mode 100644 index 00000000..ab89fbd9 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementTest.php @@ -0,0 +1,25 @@ +loadXML(''); + $this->component = new ComponentElement($dom->documentElement); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('phar-io/phive', $this->component->getName()); + } + + public function testEmailCanBeRetrieved() { + $this->assertEquals('0.6.0', $this->component->getVersion()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ContainsElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ContainsElementTest.php new file mode 100644 index 00000000..f77313de --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ContainsElementTest.php @@ -0,0 +1,63 @@ +loadXML(''); + $this->domElement = $dom->documentElement; + $this->contains = new ContainsElement($this->domElement); + } + + public function testVersionCanBeRetrieved() { + $this->assertEquals('5.6.5', $this->contains->getVersion()); + } + + public function testThrowsExceptionWhenVersionAttributeIsMissing() { + $this->domElement->removeAttribute('version'); + $this->expectException(ManifestElementException::class); + $this->contains->getVersion(); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('phpunit/phpunit', $this->contains->getName()); + } + + public function testThrowsExceptionWhenNameAttributeIsMissing() { + $this->domElement->removeAttribute('name'); + $this->expectException(ManifestElementException::class); + $this->contains->getName(); + } + + public function testTypeCanBeRetrieved() { + $this->assertEquals('application', $this->contains->getType()); + } + + public function testThrowsExceptionWhenTypeAttributeIsMissing() { + $this->domElement->removeAttribute('type'); + $this->expectException(ManifestElementException::class); + $this->contains->getType(); + } + + public function testGetExtensionElementReturnsExtensionElement() { + $this->domElement->appendChild( + $this->domElement->ownerDocument->createElementNS('https://phar.io/xml/manifest/1.0', 'extension') + ); + $this->assertInstanceOf(ExtensionElement::class, $this->contains->getExtensionElement()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/CopyrightElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/CopyrightElementTest.php new file mode 100644 index 00000000..9ad8eb38 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/CopyrightElementTest.php @@ -0,0 +1,52 @@ +dom = new DOMDocument(); + $this->dom->loadXML(''); + $this->copyright = new CopyrightElement($this->dom->documentElement); + } + + public function testThrowsExceptionWhenGetAuthroElementsIsCalledButNodesAreMissing() { + $this->expectException(ManifestElementException::class); + $this->copyright->getAuthorElements(); + } + + public function testThrowsExceptionWhenGetLicenseElementIsCalledButNodeIsMissing() { + $this->expectException(ManifestElementException::class); + $this->copyright->getLicenseElement(); + } + + public function testGetAuthorElementsReturnsAuthorElementCollection() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'author') + ); + $this->assertInstanceOf( + AuthorElementCollection::class, $this->copyright->getAuthorElements() + ); + } + + public function testGetLicenseElementReturnsLicenseElement() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'license') + ); + $this->assertInstanceOf( + LicenseElement::class, $this->copyright->getLicenseElement() + ); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementCollectionTest.php new file mode 100644 index 00000000..463e4d6e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementCollectionTest.php @@ -0,0 +1,19 @@ +loadXML(''); + $collection = new ExtElementCollection($dom->childNodes); + + foreach($collection as $position => $extElement) { + $this->assertInstanceOf(ExtElement::class, $extElement); + $this->assertEquals(0, $position); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementTest.php new file mode 100644 index 00000000..097b5224 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementTest.php @@ -0,0 +1,21 @@ +loadXML(''); + $this->ext = new ExtElement($dom->documentElement); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('dom', $this->ext->getName()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ExtensionElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtensionElementTest.php new file mode 100644 index 00000000..2ae01126 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtensionElementTest.php @@ -0,0 +1,25 @@ +loadXML(''); + $this->extension = new ExtensionElement($dom->documentElement); + } + + public function testNForCanBeRetrieved() { + $this->assertEquals('phar-io/phive', $this->extension->getFor()); + } + + public function testCompatibleVersionConstraintCanBeRetrieved() { + $this->assertEquals('~0.6', $this->extension->getCompatible()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/LicenseElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/LicenseElementTest.php new file mode 100644 index 00000000..00d4a6c4 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/LicenseElementTest.php @@ -0,0 +1,25 @@ +loadXML(''); + $this->license = new LicenseElement($dom->documentElement); + } + + public function testTypeCanBeRetrieved() { + $this->assertEquals('BSD-3', $this->license->getType()); + } + + public function testUrlCanBeRetrieved() { + $this->assertEquals('https://some.tld/LICENSE', $this->license->getUrl()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ManifestDocumentTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ManifestDocumentTest.php new file mode 100644 index 00000000..b5bb8cd0 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ManifestDocumentTest.php @@ -0,0 +1,110 @@ +expectException(ManifestDocumentException::class); + ManifestDocument::fromFile('/does/not/exist'); + } + + public function testCanBeCreatedFromFile() { + $this->assertInstanceOf( + ManifestDocument::class, + ManifestDocument::fromFile(__DIR__ . '/../_fixture/phpunit-5.6.5.xml') + ); + } + + public function testCaneBeConstructedFromString() { + $content = file_get_contents(__DIR__ . '/../_fixture/phpunit-5.6.5.xml'); + $this->assertInstanceOf( + ManifestDocument::class, + ManifestDocument::fromString($content) + ); + } + + public function testThrowsExceptionOnInvalidXML() { + $this->expectException(ManifestDocumentLoadingException::class); + ManifestDocument::fromString(''); + } + + public function testLoadingDocumentWithWrongRootNameThrowsException() { + $this->expectException(ManifestDocumentException::class); + ManifestDocument::fromString(''); + } + + public function testLoadingDocumentWithWrongNamespaceThrowsException() { + $this->expectException(ManifestDocumentException::class); + ManifestDocument::fromString(''); + } + + public function testContainsElementCanBeRetrieved() { + $this->assertInstanceOf( + ContainsElement::class, + $this->loadFixture()->getContainsElement() + ); + } + + public function testRequiresElementCanBeRetrieved() { + $this->assertInstanceOf( + RequiresElement::class, + $this->loadFixture()->getRequiresElement() + ); + } + + public function testCopyrightElementCanBeRetrieved() { + $this->assertInstanceOf( + CopyrightElement::class, + $this->loadFixture()->getCopyrightElement() + ); + } + + public function testBundlesElementCanBeRetrieved() { + $this->assertInstanceOf( + BundlesElement::class, + $this->loadFixture()->getBundlesElement() + ); + } + + public function testThrowsExceptionWhenContainsIsMissing() { + $this->expectException(ManifestDocumentException::class); + $this->loadEmptyFixture()->getContainsElement(); + } + + public function testThrowsExceptionWhenCopyirhgtIsMissing() { + $this->expectException(ManifestDocumentException::class); + $this->loadEmptyFixture()->getCopyrightElement(); + } + + public function testThrowsExceptionWhenRequiresIsMissing() { + $this->expectException(ManifestDocumentException::class); + $this->loadEmptyFixture()->getRequiresElement(); + } + + public function testThrowsExceptionWhenBundlesIsMissing() { + $this->expectException(ManifestDocumentException::class); + $this->loadEmptyFixture()->getBundlesElement(); + } + + public function testHasBundlesReturnsTrueWhenBundlesNodeIsPresent() { + $this->assertTrue( + $this->loadFixture()->hasBundlesElement() + ); + } + + public function testHasBundlesReturnsFalseWhenBundlesNoNodeIsPresent() { + $this->assertFalse( + $this->loadEmptyFixture()->hasBundlesElement() + ); + } + + private function loadFixture() { + return ManifestDocument::fromFile(__DIR__ . '/../_fixture/phpunit-5.6.5.xml'); + } + + private function loadEmptyFixture() { + return ManifestDocument::fromString( + '' + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/PhpElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/PhpElementTest.php new file mode 100644 index 00000000..546187a0 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/PhpElementTest.php @@ -0,0 +1,48 @@ +dom = new DOMDocument(); + $this->dom->loadXML(''); + $this->php = new PhpElement($this->dom->documentElement); + } + + public function testVersionConstraintCanBeRetrieved() { + $this->assertEquals('^5.6 || ^7.0', $this->php->getVersion()); + } + + public function testHasExtElementsReturnsFalseWhenNoExtensionsAreRequired() { + $this->assertFalse($this->php->hasExtElements()); + } + + public function testHasExtElementsReturnsTrueWhenExtensionsAreRequired() { + $this->addExtElement(); + $this->assertTrue($this->php->hasExtElements()); + } + + public function testGetExtElementsReturnsExtElementCollection() { + $this->addExtElement(); + $this->assertInstanceOf(ExtElementCollection::class, $this->php->getExtElements()); + } + + private function addExtElement() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'ext') + ); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/RequiresElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/RequiresElementTest.php new file mode 100644 index 00000000..907b0a6f --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/RequiresElementTest.php @@ -0,0 +1,37 @@ +dom = new DOMDocument(); + $this->dom->loadXML(''); + $this->requires = new RequiresElement($this->dom->documentElement); + } + + public function testThrowsExceptionWhenGetPhpElementIsCalledButElementIsMissing() { + $this->expectException(ManifestElementException::class); + $this->requires->getPHPElement(); + } + + public function testHasExtElementsReturnsTrueWhenExtensionsAreRequired() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'php') + ); + + $this->assertInstanceOf(PhpElement::class, $this->requires->getPHPElement()); + } + +} diff --git a/lib/composer/vendor/phar-io/version/.gitignore b/lib/composer/vendor/phar-io/version/.gitignore new file mode 100644 index 00000000..1c8f2e64 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/.gitignore @@ -0,0 +1,7 @@ +/.idea +/.php_cs.cache +/composer.lock +/src/autoload.php +/tools +/vendor + diff --git a/lib/composer/vendor/phar-io/version/.php_cs b/lib/composer/vendor/phar-io/version/.php_cs new file mode 100644 index 00000000..159d6a35 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/.php_cs @@ -0,0 +1,67 @@ +files() + ->in('src') + ->in('tests') + ->name('*.php'); + +return Symfony\CS\Config\Config::create() + ->setUsingCache(true) + ->level(\Symfony\CS\FixerInterface::NONE_LEVEL) + ->fixers( + array( + 'align_double_arrow', + 'align_equals', + 'concat_with_spaces', + 'duplicate_semicolon', + 'elseif', + 'empty_return', + 'encoding', + 'eof_ending', + 'extra_empty_lines', + 'function_call_space', + 'function_declaration', + 'indentation', + 'join_function', + 'line_after_namespace', + 'linefeed', + 'list_commas', + 'lowercase_constants', + 'lowercase_keywords', + 'method_argument_space', + 'multiple_use', + 'namespace_no_leading_whitespace', + 'no_blank_lines_after_class_opening', + 'no_empty_lines_after_phpdocs', + 'parenthesis', + 'php_closing_tag', + 'phpdoc_indent', + 'phpdoc_no_access', + 'phpdoc_no_empty_return', + 'phpdoc_no_package', + 'phpdoc_params', + 'phpdoc_scalar', + 'phpdoc_separation', + 'phpdoc_to_comment', + 'phpdoc_trim', + 'phpdoc_types', + 'phpdoc_var_without_name', + 'remove_lines_between_uses', + 'return', + 'self_accessor', + 'short_array_syntax', + 'short_tag', + 'single_line_after_imports', + 'single_quote', + 'spaces_before_semicolon', + 'spaces_cast', + 'ternary_spaces', + 'trailing_spaces', + 'trim_array_spaces', + 'unused_use', + 'visibility', + 'whitespacy_lines' + ) + ) + ->finder($finder); + diff --git a/lib/composer/vendor/phar-io/version/.travis.yml b/lib/composer/vendor/phar-io/version/.travis.yml new file mode 100644 index 00000000..b4be10f9 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/.travis.yml @@ -0,0 +1,33 @@ +os: +- linux + +language: php + +before_install: + - wget https://phar.io/releases/phive.phar + - wget https://phar.io/releases/phive.phar.asc + - gpg --keyserver hkps.pool.sks-keyservers.net --recv-keys 0x9B2D5D79 + - gpg --verify phive.phar.asc phive.phar + - chmod +x phive.phar + - sudo mv phive.phar /usr/bin/phive + +install: + - ant setup + +script: ./tools/phpunit + +php: + - 5.6 + - 7.0 + - 7.1 + - 7.0snapshot + - 7.1snapshot + - master + +matrix: + allow_failures: + - php: master + fast_finish: true + +notifications: + email: false diff --git a/lib/composer/vendor/phar-io/version/LICENSE b/lib/composer/vendor/phar-io/version/LICENSE new file mode 100644 index 00000000..359dbc50 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/LICENSE @@ -0,0 +1,31 @@ +phar-io/version + +Copyright (c) 2016-2017 Arne Blankerts , Sebastian Heuer and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of Arne Blankerts nor the names of contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + diff --git a/lib/composer/vendor/phar-io/version/README.md b/lib/composer/vendor/phar-io/version/README.md new file mode 100644 index 00000000..df448f82 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/README.md @@ -0,0 +1,16 @@ +# Version + +Library for handling version information and constraints + +[![Build Status](https://travis-ci.org/phar-io/version.svg?branch=master)](https://travis-ci.org/phar-io/version) + +## Installation + +You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): + + composer require phar-io/version + +If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: + + composer require --dev phar-io/version + diff --git a/lib/composer/vendor/phar-io/version/build.xml b/lib/composer/vendor/phar-io/version/build.xml new file mode 100644 index 00000000..943c957f --- /dev/null +++ b/lib/composer/vendor/phar-io/version/build.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/version/composer.json b/lib/composer/vendor/phar-io/version/composer.json new file mode 100644 index 00000000..891e8b17 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/composer.json @@ -0,0 +1,34 @@ +{ + "name": "phar-io/version", + "description": "Library for handling version information and constraints", + "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" + } + ], + "support": { + "issues": "https://github.com/phar-io/version/issues" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "autoload": { + "classmap": [ + "src/" + ] + } +} + diff --git a/lib/composer/vendor/phar-io/version/phive.xml b/lib/composer/vendor/phar-io/version/phive.xml new file mode 100644 index 00000000..0c3bc6f3 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/phive.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lib/composer/vendor/phar-io/version/phpunit.xml b/lib/composer/vendor/phar-io/version/phpunit.xml new file mode 100644 index 00000000..c21ffbc0 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/phpunit.xml @@ -0,0 +1,19 @@ + + + + tests + + + + + src + + + diff --git a/lib/composer/vendor/phar-io/version/src/AbstractVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/AbstractVersionConstraint.php new file mode 100644 index 00000000..b732dbca --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/AbstractVersionConstraint.php @@ -0,0 +1,32 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +abstract class AbstractVersionConstraint implements VersionConstraint { + /** + * @var string + */ + private $originalValue = ''; + + /** + * @param string $originalValue + */ + public function __construct($originalValue) { + $this->originalValue = $originalValue; + } + + /** + * @return string + */ + public function asString() { + return $this->originalValue; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/AndVersionConstraintGroup.php b/lib/composer/vendor/phar-io/version/src/AndVersionConstraintGroup.php new file mode 100644 index 00000000..455dcd19 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/AndVersionConstraintGroup.php @@ -0,0 +1,43 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class AndVersionConstraintGroup extends AbstractVersionConstraint { + /** + * @var VersionConstraint[] + */ + private $constraints = []; + + /** + * @param string $originalValue + * @param VersionConstraint[] $constraints + */ + public function __construct($originalValue, array $constraints) { + parent::__construct($originalValue); + + $this->constraints = $constraints; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + foreach ($this->constraints as $constraint) { + if (!$constraint->complies($version)) { + return false; + } + } + + return true; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/AnyVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/AnyVersionConstraint.php new file mode 100644 index 00000000..13ca2efc --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/AnyVersionConstraint.php @@ -0,0 +1,29 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class AnyVersionConstraint implements VersionConstraint { + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + return true; + } + + /** + * @return string + */ + public function asString() { + return '*'; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/ExactVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/ExactVersionConstraint.php new file mode 100644 index 00000000..b2141172 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/ExactVersionConstraint.php @@ -0,0 +1,22 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class ExactVersionConstraint extends AbstractVersionConstraint { + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + return $this->asString() == $version->getVersionString(); + } +} diff --git a/lib/composer/vendor/phar-io/version/src/Exception.php b/lib/composer/vendor/phar-io/version/src/Exception.php new file mode 100644 index 00000000..b99e4dd4 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/Exception.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +interface Exception { +} diff --git a/lib/composer/vendor/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php new file mode 100644 index 00000000..a237d79c --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php @@ -0,0 +1,38 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class GreaterThanOrEqualToVersionConstraint extends AbstractVersionConstraint { + /** + * @var Version + */ + private $minimalVersion; + + /** + * @param string $originalValue + * @param Version $minimalVersion + */ + public function __construct($originalValue, Version $minimalVersion) { + parent::__construct($originalValue); + + $this->minimalVersion = $minimalVersion; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + return $version->getVersionString() == $this->minimalVersion->getVersionString() || + $version->isGreaterThan($this->minimalVersion); + } +} diff --git a/lib/composer/vendor/phar-io/version/src/InvalidVersionException.php b/lib/composer/vendor/phar-io/version/src/InvalidVersionException.php new file mode 100644 index 00000000..e52f5d71 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/InvalidVersionException.php @@ -0,0 +1,5 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class OrVersionConstraintGroup extends AbstractVersionConstraint { + /** + * @var VersionConstraint[] + */ + private $constraints = []; + + /** + * @param string $originalValue + * @param VersionConstraint[] $constraints + */ + public function __construct($originalValue, array $constraints) { + parent::__construct($originalValue); + + $this->constraints = $constraints; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + foreach ($this->constraints as $constraint) { + if ($constraint->complies($version)) { + return true; + } + } + + return false; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/PreReleaseSuffix.php b/lib/composer/vendor/phar-io/version/src/PreReleaseSuffix.php new file mode 100644 index 00000000..d9e7ee7d --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/PreReleaseSuffix.php @@ -0,0 +1,41 @@ +value = $value; + $this->number = $number; + } + + /** + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * @return int|null + */ + public function getNumber() + { + return $this->number; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php new file mode 100644 index 00000000..dbeaa06d --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php @@ -0,0 +1,48 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class SpecificMajorAndMinorVersionConstraint extends AbstractVersionConstraint { + /** + * @var int + */ + private $major = 0; + + /** + * @var int + */ + private $minor = 0; + + /** + * @param string $originalValue + * @param int $major + * @param int $minor + */ + public function __construct($originalValue, $major, $minor) { + parent::__construct($originalValue); + + $this->major = $major; + $this->minor = $minor; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + if ($version->getMajor()->getValue() != $this->major) { + return false; + } + + return $version->getMinor()->getValue() == $this->minor; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/SpecificMajorVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/SpecificMajorVersionConstraint.php new file mode 100644 index 00000000..51b12d9d --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/SpecificMajorVersionConstraint.php @@ -0,0 +1,37 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class SpecificMajorVersionConstraint extends AbstractVersionConstraint { + /** + * @var int + */ + private $major = 0; + + /** + * @param string $originalValue + * @param int $major + */ + public function __construct($originalValue, $major) { + parent::__construct($originalValue); + + $this->major = $major; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + return $version->getMajor()->getValue() == $this->major; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/UnsupportedVersionConstraintException.php b/lib/composer/vendor/phar-io/version/src/UnsupportedVersionConstraintException.php new file mode 100644 index 00000000..45488c2d --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/UnsupportedVersionConstraintException.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +final class UnsupportedVersionConstraintException extends \RuntimeException implements Exception { +} diff --git a/lib/composer/vendor/phar-io/version/src/Version.php b/lib/composer/vendor/phar-io/version/src/Version.php new file mode 100644 index 00000000..825ed443 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/Version.php @@ -0,0 +1,162 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class Version { + /** + * @var VersionNumber + */ + private $major; + + /** + * @var VersionNumber + */ + private $minor; + + /** + * @var VersionNumber + */ + private $patch; + + /** + * @var PreReleaseSuffix + */ + private $preReleaseSuffix; + + /** + * @var string + */ + private $versionString = ''; + + /** + * @param string $versionString + */ + public function __construct($versionString) { + $this->ensureVersionStringIsValid($versionString); + + $this->versionString = $versionString; + } + + /** + * @param array $matches + */ + private function parseVersion(array $matches) { + $this->major = new VersionNumber($matches['Major']); + $this->minor = new VersionNumber($matches['Minor']); + $this->patch = isset($matches['Patch']) ? new VersionNumber($matches['Patch']) : new VersionNumber(null); + + if (isset($matches['ReleaseType'])) { + $preReleaseNumber = isset($matches['ReleaseTypeCount']) ? (int) $matches['ReleaseTypeCount'] : null; + + $this->preReleaseSuffix = new PreReleaseSuffix($matches['ReleaseType'], $preReleaseNumber); + } + } + + /** + * @return PreReleaseSuffix + */ + public function getPreReleaseSuffix() + { + return $this->preReleaseSuffix; + } + + /** + * @return string + */ + public function getVersionString() { + return $this->versionString; + } + + /** + * @param Version $version + * + * @return bool + */ + public function isGreaterThan(Version $version) { + if ($version->getMajor()->getValue() > $this->getMajor()->getValue()) { + return false; + } + + if ($version->getMajor()->getValue() < $this->getMajor()->getValue()) { + return true; + } + + if ($version->getMinor()->getValue() > $this->getMinor()->getValue()) { + return false; + } + + if ($version->getMinor()->getValue() < $this->getMinor()->getValue()) { + return true; + } + + if ($version->getPatch()->getValue() >= $this->getPatch()->getValue()) { + return false; + } + + if ($version->getPatch()->getValue() < $this->getPatch()->getValue()) { + return true; + } + + return false; + } + + /** + * @return VersionNumber + */ + public function getMajor() { + return $this->major; + } + + /** + * @return VersionNumber + */ + public function getMinor() { + return $this->minor; + } + + /** + * @return VersionNumber + */ + public function getPatch() { + return $this->patch; + } + + /** + * @param string $version + * + * @throws InvalidVersionException + */ + private function ensureVersionStringIsValid($version) { + $regex = '/^v? + (?(0|(?:[1-9][0-9]*))) + \\. + (?(0|(?:[1-9][0-9]*))) + (\\. + (?(0|(?:[1-9][0-9]*))) + )? + (?: + - + (?(?:(dev|beta|b|RC|alpha|a|patch|p))) + (?: + (?[0-9]) + )? + )? + $/x'; + + if (preg_match($regex, $version, $matches) !== 1) { + throw new InvalidVersionException( + sprintf("Version string '%s' does not follow SemVer semantics", $version) + ); + } + + $this->parseVersion($matches); + } +} diff --git a/lib/composer/vendor/phar-io/version/src/VersionConstraint.php b/lib/composer/vendor/phar-io/version/src/VersionConstraint.php new file mode 100644 index 00000000..9558163f --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/VersionConstraint.php @@ -0,0 +1,26 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +interface VersionConstraint { + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version); + + /** + * @return string + */ + public function asString(); + +} diff --git a/lib/composer/vendor/phar-io/version/src/VersionConstraintParser.php b/lib/composer/vendor/phar-io/version/src/VersionConstraintParser.php new file mode 100644 index 00000000..0a24f87d --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/VersionConstraintParser.php @@ -0,0 +1,122 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class VersionConstraintParser { + /** + * @param string $value + * + * @return VersionConstraint + * + * @throws UnsupportedVersionConstraintException + */ + public function parse($value) { + + if (strpos($value, '||') !== false) { + return $this->handleOrGroup($value); + } + + if (!preg_match('/^[\^~\*]?[\d.\*]+$/', $value)) { + throw new UnsupportedVersionConstraintException( + sprintf('Version constraint %s is not supported.', $value) + ); + } + + switch ($value[0]) { + case '~': + return $this->handleTildeOperator($value); + case '^': + return $this->handleCaretOperator($value); + } + + $version = new VersionConstraintValue($value); + + if ($version->getMajor()->isAny()) { + return new AnyVersionConstraint(); + } + + if ($version->getMinor()->isAny()) { + return new SpecificMajorVersionConstraint( + $value, + $version->getMajor()->getValue() + ); + } + + if ($version->getPatch()->isAny()) { + return new SpecificMajorAndMinorVersionConstraint( + $value, + $version->getMajor()->getValue(), + $version->getMinor()->getValue() + ); + } + + return new ExactVersionConstraint($value); + } + + /** + * @param $value + * + * @return OrVersionConstraintGroup + */ + private function handleOrGroup($value) { + $constraints = []; + + foreach (explode('||', $value) as $groupSegment) { + $constraints[] = $this->parse(trim($groupSegment)); + } + + return new OrVersionConstraintGroup($value, $constraints); + } + + /** + * @param string $value + * + * @return AndVersionConstraintGroup + */ + private function handleTildeOperator($value) { + $version = new Version(substr($value, 1)); + $constraints = [ + new GreaterThanOrEqualToVersionConstraint($value, $version) + ]; + + if ($version->getPatch()->isAny()) { + $constraints[] = new SpecificMajorVersionConstraint( + $value, + $version->getMajor()->getValue() + ); + } else { + $constraints[] = new SpecificMajorAndMinorVersionConstraint( + $value, + $version->getMajor()->getValue(), + $version->getMinor()->getValue() + ); + } + + return new AndVersionConstraintGroup($value, $constraints); + } + + /** + * @param string $value + * + * @return AndVersionConstraintGroup + */ + private function handleCaretOperator($value) { + $version = new Version(substr($value, 1)); + + return new AndVersionConstraintGroup( + $value, + [ + new GreaterThanOrEqualToVersionConstraint($value, $version), + new SpecificMajorVersionConstraint($value, $version->getMajor()->getValue()) + ] + ); + } +} diff --git a/lib/composer/vendor/phar-io/version/src/VersionConstraintValue.php b/lib/composer/vendor/phar-io/version/src/VersionConstraintValue.php new file mode 100644 index 00000000..ad59068c --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/VersionConstraintValue.php @@ -0,0 +1,123 @@ +versionString = $versionString; + + $this->parseVersion($versionString); + } + + /** + * @param $versionString + */ + private function parseVersion($versionString) { + $this->extractBuildMetaData($versionString); + $this->extractLabel($versionString); + + $versionSegments = explode('.', $versionString); + $this->major = new VersionNumber($versionSegments[0]); + + $minorValue = isset($versionSegments[1]) ? $versionSegments[1] : null; + $patchValue = isset($versionSegments[2]) ? $versionSegments[2] : null; + + $this->minor = new VersionNumber($minorValue); + $this->patch = new VersionNumber($patchValue); + } + + /** + * @param string $versionString + */ + private function extractBuildMetaData(&$versionString) { + if (preg_match('/\+(.*)/', $versionString, $matches) == 1) { + $this->buildMetaData = $matches[1]; + $versionString = str_replace($matches[0], '', $versionString); + } + } + + /** + * @param string $versionString + */ + private function extractLabel(&$versionString) { + if (preg_match('/\-(.*)/', $versionString, $matches) == 1) { + $this->label = $matches[1]; + $versionString = str_replace($matches[0], '', $versionString); + } + } + + /** + * @return string + */ + public function getLabel() { + return $this->label; + } + + /** + * @return string + */ + public function getBuildMetaData() { + return $this->buildMetaData; + } + + /** + * @return string + */ + public function getVersionString() { + return $this->versionString; + } + + /** + * @return VersionNumber + */ + public function getMajor() { + return $this->major; + } + + /** + * @return VersionNumber + */ + public function getMinor() { + return $this->minor; + } + + /** + * @return VersionNumber + */ + public function getPatch() { + return $this->patch; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/VersionNumber.php b/lib/composer/vendor/phar-io/version/src/VersionNumber.php new file mode 100644 index 00000000..ab512ed1 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/VersionNumber.php @@ -0,0 +1,41 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class VersionNumber { + /** + * @var int + */ + private $value; + + /** + * @param mixed $value + */ + public function __construct($value) { + if (is_numeric($value)) { + $this->value = $value; + } + } + + /** + * @return bool + */ + public function isAny() { + return $this->value === null; + } + + /** + * @return int + */ + public function getValue() { + return $this->value; + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Integration/VersionConstraintParserTest.php b/lib/composer/vendor/phar-io/version/tests/Integration/VersionConstraintParserTest.php new file mode 100644 index 00000000..683e9d03 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Integration/VersionConstraintParserTest.php @@ -0,0 +1,125 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Version\VersionConstraintParser + */ +class VersionConstraintParserTest extends TestCase { + /** + * @dataProvider versionStringProvider + * + * @param string $versionString + * @param VersionConstraint $expectedConstraint + */ + public function testReturnsExpectedConstraint($versionString, VersionConstraint $expectedConstraint) { + $parser = new VersionConstraintParser; + + $this->assertEquals($expectedConstraint, $parser->parse($versionString)); + } + + /** + * @dataProvider unsupportedVersionStringProvider + * + * @param string $versionString + */ + public function testThrowsExceptionIfVersionStringIsNotSupported($versionString) { + $parser = new VersionConstraintParser; + + $this->expectException(UnsupportedVersionConstraintException::class); + + $parser->parse($versionString); + } + + /** + * @return array + */ + public function versionStringProvider() { + return [ + ['1.0.2', new ExactVersionConstraint('1.0.2')], + [ + '~4.6', + new AndVersionConstraintGroup( + '~4.6', + [ + new GreaterThanOrEqualToVersionConstraint('~4.6', new Version('4.6')), + new SpecificMajorVersionConstraint('~4.6', 4) + ] + ) + ], + [ + '~4.6.2', + new AndVersionConstraintGroup( + '~4.6.2', + [ + new GreaterThanOrEqualToVersionConstraint('~4.6.2', new Version('4.6.2')), + new SpecificMajorAndMinorVersionConstraint('~4.6.2', 4, 6) + ] + ) + ], + [ + '^2.6.1', + new AndVersionConstraintGroup( + '^2.6.1', + [ + new GreaterThanOrEqualToVersionConstraint('^2.6.1', new Version('2.6.1')), + new SpecificMajorVersionConstraint('^2.6.1', 2) + ] + ) + ], + ['5.1.*', new SpecificMajorAndMinorVersionConstraint('5.1.*', 5, 1)], + ['5.*', new SpecificMajorVersionConstraint('5.*', 5)], + ['*', new AnyVersionConstraint()], + [ + '1.0.2 || 1.0.5', + new OrVersionConstraintGroup( + '1.0.2 || 1.0.5', + [ + new ExactVersionConstraint('1.0.2'), + new ExactVersionConstraint('1.0.5') + ] + ) + ], + [ + '^5.6 || ^7.0', + new OrVersionConstraintGroup( + '^5.6 || ^7.0', + [ + new AndVersionConstraintGroup( + '^5.6', [ + new GreaterThanOrEqualToVersionConstraint('^5.6', new Version('5.6')), + new SpecificMajorVersionConstraint('^5.6', 5) + ] + ), + new AndVersionConstraintGroup( + '^7.0', [ + new GreaterThanOrEqualToVersionConstraint('^7.0', new Version('7.0')), + new SpecificMajorVersionConstraint('^7.0', 7) + ] + ) + ] + ) + ] + ]; + } + + public function unsupportedVersionStringProvider() { + return [ + ['foo'], + ['+1.0.2'], + ['>=2.0'], + ['^5.6 || >= 7.0'], + ['2.0 || foo'] + ]; + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/AbstractVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/AbstractVersionConstraintTest.php new file mode 100644 index 00000000..c6185669 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/AbstractVersionConstraintTest.php @@ -0,0 +1,25 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Version\AbstractVersionConstraint + */ +class AbstractVersionConstraintTest extends TestCase { + public function testAsString() { + /** @var AbstractVersionConstraint|\PHPUnit_Framework_MockObject_MockObject $constraint */ + $constraint = $this->getMockForAbstractClass(AbstractVersionConstraint::class, ['foo']); + + $this->assertSame('foo', $constraint->asString()); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/AndVersionConstraintGroupTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/AndVersionConstraintGroupTest.php new file mode 100644 index 00000000..ce7f5da8 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/AndVersionConstraintGroupTest.php @@ -0,0 +1,52 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\AndVersionConstraintGroup + */ +class AndVersionConstraintGroupTest extends TestCase { + public function testReturnsFalseIfOneConstraintReturnsFalse() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $secondConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(false)); + + $group = new AndVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertFalse($group->complies(new Version('1.0.0'))); + } + + public function testReturnsTrueIfAllConstraintsReturnsTrue() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $secondConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $group = new AndVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertTrue($group->complies(new Version('1.0.0'))); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/AnyVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/AnyVersionConstraintTest.php new file mode 100644 index 00000000..331785e3 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/AnyVersionConstraintTest.php @@ -0,0 +1,41 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\AnyVersionConstraint + */ +class AnyVersionConstraintTest extends TestCase { + public function versionProvider() { + return [ + [new Version('1.0.2')], + [new Version('4.8')], + [new Version('0.1.1-dev')] + ]; + } + + /** + * @dataProvider versionProvider + * + * @param Version $version + */ + public function testReturnsTrue(Version $version) { + $constraint = new AnyVersionConstraint; + + $this->assertTrue($constraint->complies($version)); + } + + public function testAsString() { + $this->assertSame('*', (new AnyVersionConstraint())->asString()); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/ExactVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/ExactVersionConstraintTest.php new file mode 100644 index 00000000..6b906faf --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/ExactVersionConstraintTest.php @@ -0,0 +1,58 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\ExactVersionConstraint + */ +class ExactVersionConstraintTest extends TestCase { + public function compliantVersionProvider() { + return [ + ['1.0.2', new Version('1.0.2')], + ['4.8.9', new Version('4.8.9')], + ['4.8', new Version('4.8')], + ]; + } + + public function nonCompliantVersionProvider() { + return [ + ['1.0.2', new Version('1.0.3')], + ['4.8.9', new Version('4.7.9')], + ['4.8', new Version('4.8.5')], + ]; + } + + /** + * @dataProvider compliantVersionProvider + * + * @param string $constraintValue + * @param Version $version + */ + public function testReturnsTrueForCompliantVersion($constraintValue, Version $version) { + $constraint = new ExactVersionConstraint($constraintValue); + + $this->assertTrue($constraint->complies($version)); + } + + /** + * @dataProvider nonCompliantVersionProvider + * + * @param string $constraintValue + * @param Version $version + */ + public function testReturnsFalseForNonCompliantVersion($constraintValue, Version $version) { + $constraint = new ExactVersionConstraint($constraintValue); + + $this->assertFalse($constraint->complies($version)); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/GreaterThanOrEqualToVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/GreaterThanOrEqualToVersionConstraintTest.php new file mode 100644 index 00000000..2ae54a86 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/GreaterThanOrEqualToVersionConstraintTest.php @@ -0,0 +1,47 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\GreaterThanOrEqualToVersionConstraint + */ +class GreaterThanOrEqualToVersionConstraintTest extends TestCase { + public function versionProvider() { + return [ + // compliant versions + [new Version('1.0.2'), new Version('1.0.2'), true], + [new Version('1.0.2'), new Version('1.0.3'), true], + [new Version('1.0.2'), new Version('1.1.1'), true], + [new Version('1.0.2'), new Version('2.0.0'), true], + [new Version('1.0.2'), new Version('1.0.3'), true], + // non-compliant versions + [new Version('1.0.2'), new Version('1.0.1'), false], + [new Version('1.9.8'), new Version('0.9.9'), false], + [new Version('2.3.1'), new Version('2.2.3'), false], + [new Version('3.0.2'), new Version('2.9.9'), false], + ]; + } + + /** + * @dataProvider versionProvider + * + * @param Version $constraintVersion + * @param Version $version + * @param bool $expectedResult + */ + public function testReturnsTrueForCompliantVersions(Version $constraintVersion, Version $version, $expectedResult) { + $constraint = new GreaterThanOrEqualToVersionConstraint('foo', $constraintVersion); + + $this->assertSame($expectedResult, $constraint->complies($version)); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/OrVersionConstraintGroupTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/OrVersionConstraintGroupTest.php new file mode 100644 index 00000000..4c6f5949 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/OrVersionConstraintGroupTest.php @@ -0,0 +1,65 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\OrVersionConstraintGroup + */ +class OrVersionConstraintGroupTest extends TestCase { + public function testReturnsTrueIfOneConstraintReturnsFalse() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(false)); + + $secondConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $group = new OrVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertTrue($group->complies(new Version('1.0.0'))); + } + + public function testReturnsTrueIfAllConstraintsReturnsTrue() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $group = new OrVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertTrue($group->complies(new Version('1.0.0'))); + } + + public function testReturnsFalseIfAllConstraintsReturnsFalse() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(false)); + + $secondConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(false)); + + $group = new OrVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertFalse($group->complies(new Version('1.0.0'))); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorAndMinorVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorAndMinorVersionConstraintTest.php new file mode 100644 index 00000000..d3ab1235 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorAndMinorVersionConstraintTest.php @@ -0,0 +1,45 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\SpecificMajorAndMinorVersionConstraint + */ +class SpecificMajorAndMinorVersionConstraintTest extends TestCase { + public function versionProvider() { + return [ + // compliant versions + [1, 0, new Version('1.0.2'), true], + [1, 0, new Version('1.0.3'), true], + [1, 1, new Version('1.1.1'), true], + // non-compliant versions + [2, 9, new Version('0.9.9'), false], + [3, 2, new Version('2.2.3'), false], + [2, 8, new Version('2.9.9'), false], + ]; + } + + /** + * @dataProvider versionProvider + * + * @param int $major + * @param int $minor + * @param Version $version + * @param bool $expectedResult + */ + public function testReturnsTrueForCompliantVersions($major, $minor, Version $version, $expectedResult) { + $constraint = new SpecificMajorAndMinorVersionConstraint('foo', $major, $minor); + + $this->assertSame($expectedResult, $constraint->complies($version)); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorVersionConstraintTest.php new file mode 100644 index 00000000..fc78c7e9 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorVersionConstraintTest.php @@ -0,0 +1,44 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\SpecificMajorVersionConstraint + */ +class SpecificMajorVersionConstraintTest extends TestCase { + public function versionProvider() { + return [ + // compliant versions + [1, new Version('1.0.2'), true], + [1, new Version('1.0.3'), true], + [1, new Version('1.1.1'), true], + // non-compliant versions + [2, new Version('0.9.9'), false], + [3, new Version('2.2.3'), false], + [3, new Version('2.9.9'), false], + ]; + } + + /** + * @dataProvider versionProvider + * + * @param int $major + * @param Version $version + * @param bool $expectedResult + */ + public function testReturnsTrueForCompliantVersions($major, Version $version, $expectedResult) { + $constraint = new SpecificMajorVersionConstraint('foo', $major); + + $this->assertSame($expectedResult, $constraint->complies($version)); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/VersionTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/VersionTest.php new file mode 100644 index 00000000..4d0eee4e --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/VersionTest.php @@ -0,0 +1,104 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Version\Version + */ +class VersionTest extends TestCase { + /** + * @dataProvider versionProvider + * + * @param string $versionString + * @param string $expectedMajor + * @param string $expectedMinor + * @param string $expectedPatch + * @param string $expectedPreReleaseValue + * @param int $expectedReleaseCount + */ + public function testParsesVersionNumbers($versionString, $expectedMajor, $expectedMinor, $expectedPatch, $expectedPreReleaseValue = '', $expectedReleaseCount = 0) { + $version = new Version($versionString); + + $this->assertSame($expectedMajor, $version->getMajor()->getValue()); + $this->assertSame($expectedMinor, $version->getMinor()->getValue()); + $this->assertSame($expectedPatch, $version->getPatch()->getValue()); + if ($expectedPreReleaseValue !== '') { + $this->assertSame($expectedPreReleaseValue, $version->getPreReleaseSuffix()->getValue()); + } + if ($expectedReleaseCount !== 0) { + $this->assertSame($expectedReleaseCount, $version->getPreReleaseSuffix()->getNumber()); + } + + $this->assertSame($versionString, $version->getVersionString()); + } + + public function versionProvider() { + return [ + ['0.0.1', '0', '0', '1'], + ['0.1.2', '0', '1', '2'], + ['1.0.0-alpha', '1', '0', '0', 'alpha'], + ['3.4.12-dev3', '3', '4', '12', 'dev', 3], + ]; + } + + /** + * @dataProvider versionGreaterThanProvider + * + * @param Version $versionA + * @param Version $versionB + * @param bool $expectedResult + */ + public function testIsGreaterThan(Version $versionA, Version $versionB, $expectedResult) { + $this->assertSame($expectedResult, $versionA->isGreaterThan($versionB)); + } + + /** + * @return array + */ + public function versionGreaterThanProvider() { + return [ + [new Version('1.0.0'), new Version('1.0.1'), false], + [new Version('1.0.1'), new Version('1.0.0'), true], + [new Version('1.1.0'), new Version('1.0.1'), true], + [new Version('1.1.0'), new Version('2.0.1'), false], + [new Version('1.1.0'), new Version('1.1.0'), false], + [new Version('2.5.8'), new Version('1.6.8'), true], + [new Version('2.5.8'), new Version('2.6.8'), false], + [new Version('2.5.8'), new Version('3.1.2'), false], + ]; + } + + /** + * @dataProvider invalidVersionStringProvider + * + * @param string $versionString + */ + public function testThrowsExceptionIfVersionStringDoesNotFollowSemVer($versionString) + { + $this->expectException(InvalidVersionException::class); + new Version($versionString); + } + + /** + * @return array + */ + public function invalidVersionStringProvider() + { + return [ + ['foo'], + ['0.0.1-dev+ABC', '0', '0', '1', 'dev', 'ABC'], + ['1.0.0-x.7.z.92', '1', '0', '0', 'x.7.z.92'] + ]; + } + +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/.gitignore b/lib/composer/vendor/phpdocumentor/reflection-common/.gitignore deleted file mode 100644 index c56f6719..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-common/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -composer.phar -vendor/ -build/ - diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/.travis.yml b/lib/composer/vendor/phpdocumentor/reflection-common/.travis.yml similarity index 98% rename from lib/composer/vendor/phpdocumentor/type-resolver/.travis.yml rename to lib/composer/vendor/phpdocumentor/reflection-common/.travis.yml index c882b141..958ecf86 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/.travis.yml +++ b/lib/composer/vendor/phpdocumentor/reflection-common/.travis.yml @@ -3,6 +3,7 @@ php: - 5.5 - 5.6 - 7.0 + - 7.1 - hhvm - nightly diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/README.md b/lib/composer/vendor/phpdocumentor/reflection-common/README.md index 52b12bc0..68a80c82 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-common/README.md +++ b/lib/composer/vendor/phpdocumentor/reflection-common/README.md @@ -1 +1,2 @@ # ReflectionCommon +[![Build Status](https://travis-ci.org/phpDocumentor/ReflectionCommon.svg?branch=master)](https://travis-ci.org/phpDocumentor/ReflectionCommon) diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/composer.lock b/lib/composer/vendor/phpdocumentor/reflection-common/composer.lock deleted file mode 100644 index e01dc3c1..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-common/composer.lock +++ /dev/null @@ -1,974 +0,0 @@ -{ - "_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" - ], - "hash": "49ee00389e4ccd00d7e93a147103b2ab", - "packages": [], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "2.0.*@ALPHA" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Instantiator\\": "src" - } - }, - "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": "2014-10-13 12:58:55" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2015-02-03 12:10:50" - }, - { - "name": "phpspec/prophecy", - "version": "v1.4.1", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", - "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1" - }, - "require-dev": { - "phpspec/phpspec": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.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": "2015-04-27 22:15:08" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6b7d2094ca2a685a2cad846cb7cd7a30e8b9470f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b7d2094ca2a685a2cad846cb7cd7a30e8b9470f", - "reference": "6b7d2094ca2a685a2cad846cb7cd7a30e8b9470f", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "~1.0", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "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": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.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": "2015-06-01 07:35:26" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb", - "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb", - "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": "2015-04-02 05:19:05" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "Text/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2014-01-30 17:20:04" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "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": "2013-08-02 07:42:54" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "eab81d02569310739373308137284e0158424330" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330", - "reference": "eab81d02569310739373308137284e0158424330", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-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": "2015-04-08 04:46:07" - }, - { - "name": "phpunit/phpunit", - "version": "4.6.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "816d12536a7a032adc3b68737f82cfbbf98b79c1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/816d12536a7a032adc3b68737f82cfbbf98b79c1", - "reference": "816d12536a7a032adc3b68737f82cfbbf98b79c1", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "~1.3,>=1.3.1", - "phpunit/php-code-coverage": "~2.0,>=2.0.11", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "~1.2", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.1|~3.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.6.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": "2015-05-29 06:00:03" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/253c005852591fd547fc18cd5b7b43a1ec82d8f7", - "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.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": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-05-29 05:19:18" - }, - { - "name": "sebastian/comparator", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.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": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-01-29 16:28:08" - }, - { - "name": "sebastian/diff", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-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": "http://www.github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-02-22 15:13:53" - }, - { - "name": "sebastian/environment", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.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": "2015-01-01 10:01:08" - }, - { - "name": "sebastian/exporter", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "84839970d05254c73cde183a721c7af13aede943" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", - "reference": "84839970d05254c73cde183a721c7af13aede943", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.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": "2015-01-27 07:23:06" - }, - { - "name": "sebastian/global-state", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "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": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2014-10-06 09:23:50" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "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": "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": "2015-01-24 09:48:32" - }, - { - "name": "sebastian/version", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", - "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", - "shasum": "" - }, - "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": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-02-24 06:35:25" - }, - { - "name": "symfony/yaml", - "version": "v2.7.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/4a29a5248aed4fb45f626a7bbbd330291492f5c3", - "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - } - }, - "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": "2015-05-02 15:21:08" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [] -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/phpunit.xml.dist b/lib/composer/vendor/phpdocumentor/reflection-common/phpunit.xml.dist deleted file mode 100644 index 31811501..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-common/phpunit.xml.dist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - ./tests/unit/ - - - - - src - - - - - - - - diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/src/Fqsen.php b/lib/composer/vendor/phpdocumentor/reflection-common/src/Fqsen.php index c7be3f15..ce88d03f 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-common/src/Fqsen.php +++ b/lib/composer/vendor/phpdocumentor/reflection-common/src/Fqsen.php @@ -38,7 +38,11 @@ final class Fqsen public function __construct($fqsen) { $matches = array(); - $result = preg_match('/^\\\\([\\w_\\\\]*)(?:[:]{2}\\$?([\\w_]+))?(?:\\(\\))?$/', $fqsen, $matches); + $result = preg_match( + '/^\\\\([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\\\]*)?(?:[:]{2}\\$?([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*))?(?:\\(\\))?$/', + $fqsen, + $matches + ); if ($result === 0) { throw new \InvalidArgumentException( diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/tests/common/bootstrap.php b/lib/composer/vendor/phpdocumentor/reflection-common/tests/common/bootstrap.php deleted file mode 100644 index 6e46d5e6..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-common/tests/common/bootstrap.php +++ /dev/null @@ -1,10 +0,0 @@ -assertEquals($name, $instance->getName()); - } - - /** - * Data provider for ValidFormats tests. Contains a complete list from psr-5 draft. - * - * @return array - */ - public function validFqsenProvider() - { - return [ - ['\\', ''], - ['\My\Space', 'Space'], - ['\My\Space\myFunction()', 'myFunction'], - ['\My\Space\MY_CONSTANT', 'MY_CONSTANT'], - ['\My\Space\MY_CONSTANT2', 'MY_CONSTANT2'], - ['\My\Space\MyClass', 'MyClass'], - ['\My\Space\MyInterface', 'MyInterface'], - ['\My\Space\MyTrait', 'MyTrait'], - ['\My\Space\MyClass::myMethod()', 'myMethod'], - ['\My\Space\MyClass::$my_property', 'my_property'], - ['\My\Space\MyClass::MY_CONSTANT', 'MY_CONSTANT'], - ]; - } - - /** - * @param string $fqsen - * @covers ::__construct - * @dataProvider invalidFqsenProvider - * @expectedException \InvalidArgumentException - */ - public function testInValidFormats($fqsen) - { - new Fqsen($fqsen); - } - - /** - * Data provider for invalidFormats tests. Contains a complete list from psr-5 draft. - * - * @return array - */ - public function invalidFqsenProvider() - { - return [ - ['\My\*'], - ['\My\Space\.()'], - ['My\Space'], - ]; - } - - /** - * @covers ::__construct - * @covers ::__toString - */ - public function testToString() - { - $className = new Fqsen('\\phpDocumentor\\Application'); - - $this->assertEquals('\\phpDocumentor\\Application', (string)$className); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/.coveralls.yml b/lib/composer/vendor/phpdocumentor/reflection-docblock/.coveralls.yml new file mode 100644 index 00000000..c512a3d5 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/.coveralls.yml @@ -0,0 +1,3 @@ +service_name: travis-ci +coverage_clover: coverage.xml +json_path: coverage.json diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/.scrutinizer.yml b/lib/composer/vendor/phpdocumentor/reflection-docblock/.scrutinizer.yml deleted file mode 100644 index 5061d523..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/.scrutinizer.yml +++ /dev/null @@ -1,32 +0,0 @@ -before_commands: - - "composer install --no-dev --prefer-source" - -tools: - external_code_coverage: true - php_code_sniffer: - enabled: true - config: - standard: PSR2 - filter: - paths: ["src/*", "tests/*"] - php_cpd: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_loc: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_mess_detector: - enabled: true - config: - ruleset: phpmd.xml.dist - design_rules: { eval_expression: false } - filter: - paths: ["src/*"] - php_pdepend: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_analyzer: - enabled: true - filter: - paths: ["src/*", "tests/*"] - sensiolabs_security_checker: true diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/.travis.yml b/lib/composer/vendor/phpdocumentor/reflection-docblock/.travis.yml deleted file mode 100644 index 920958df..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/.travis.yml +++ /dev/null @@ -1,36 +0,0 @@ -language: php -php: - - 5.5 - - 5.6 - - 7.0 - - hhvm - - nightly - -matrix: - allow_failures: - - php: - - hhvm - - nightly - -cache: - directories: - - $HOME/.composer/cache - -script: - - vendor/bin/phpunit --coverage-clover=coverage.clover -v - - composer update --no-interaction --prefer-source - - vendor/bin/phpunit -v - -before_script: - - composer install --no-interaction - -after_script: - - wget https://scrutinizer-ci.com/ocular.phar - - php ocular.phar code-coverage:upload --format=php-clover coverage.clover - -notifications: - irc: "irc.freenode.org#phpdocumentor" - email: - - mike.vanriel@naenius.com - - ashnazg@php.net - - boen.robot@gmail.com diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/README.md b/lib/composer/vendor/phpdocumentor/reflection-docblock/README.md index a1984a15..5a7d326d 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/README.md +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/README.md @@ -10,16 +10,12 @@ that is 100% compatible with the [PHPDoc standard](http://phpdoc.org/docs/latest With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock. -> **Note**: *this is a core component of phpDocumentor and is constantly being -> optimized for performance.* - Installation ------------ -You can install the component in the following ways: - -* Use the official Github repository (https://github.com/phpDocumentor/ReflectionDocBlock) -* Via Composer (http://packagist.org/packages/phpdocumentor/reflection-docblock) +```bash +composer require phpdocumentor/reflection-docblock +``` Usage ----- @@ -52,18 +48,20 @@ $docblock = $factory->create($docComment); ``` The `create` method will yield an object of type `\phpDocumentor\Reflection\DocBlock` -whose methods can be queried as shown in the following example. +whose methods can be queried: ```php -// Should contain the summary for this DocBlock +// Contains the summary for this DocBlock $summary = $docblock->getSummary(); -// Contains an object of type \phpDocumentor\Reflection\DocBlock\Description; -// you can either cast it to string or use the render method to get a string -// representation of the Description. +// Contains \phpDocumentor\Reflection\DocBlock\Description object $description = $docblock->getDescription(); + +// You can either cast it to string +$description = (string) $docblock->getDescription(); + +// Or use the render method to get a string representation of the Description. +$description = $docblock->getDescription()->render(); ``` -> For more examples it would be best to review the scripts in the `/examples` -> folder. - +> For more examples it would be best to review the scripts in the [`/examples` folder](/examples). diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.json b/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.json index 85be2fdd..e3dc38a9 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.json +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.json @@ -10,9 +10,9 @@ } ], "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "autoload": { @@ -22,7 +22,13 @@ "psr-4": {"phpDocumentor\\Reflection\\": ["tests/unit"]} }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4", + "doctrine/instantiator": "~1.0.5" + }, + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } } } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.lock b/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.lock deleted file mode 100644 index b4da3c1b..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.lock +++ /dev/null @@ -1,1120 +0,0 @@ -{ - "_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" - ], - "hash": "9dfabded4193c3fd2ec85874de3b2e3c", - "content-hash": "69f6ae6608b8524fa04ddb0264bbf091", - "packages": [ - { - "name": "phpdocumentor/reflection-common", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "9969bd1c9661a73fdab104df7dbf132639d5c4d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/9969bd1c9661a73fdab104df7dbf132639d5c4d8", - "reference": "9969bd1c9661a73fdab104df7dbf132639d5c4d8", - "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": "2015-06-12 22:21:38" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "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": "2016-06-10 07:14:17" - }, - { - "name": "webmozart/assert", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "b8ef76d0f0c3b9a0a1bc987085fe0a0ddba984ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/b8ef76d0f0c3b9a0a1bc987085fe0a0ddba984ab", - "reference": "b8ef76d0f0c3b9a0a1bc987085fe0a0ddba984ab", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-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": "2015-05-12 15:19:25" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.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": "2015-06-14 21:17:01" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v1.2.2", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "satooshi/php-coveralls": "dev-master" - }, - "type": "library", - "autoload": { - "classmap": [ - "hamcrest" - ], - "files": [ - "hamcrest/Hamcrest.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "time": "2015-05-11 14:41:42" - }, - { - "name": "mockery/mockery", - "version": "0.9.4", - "source": { - "type": "git", - "url": "https://github.com/padraic/mockery.git", - "reference": "70bba85e4aabc9449626651f48b9018ede04f86b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/padraic/mockery/zipball/70bba85e4aabc9449626651f48b9018ede04f86b", - "reference": "70bba85e4aabc9449626651f48b9018ede04f86b", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "~1.1", - "lib-pcre": ">=7.0", - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9.x-dev" - } - }, - "autoload": { - "psr-0": { - "Mockery": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", - "homepage": "http://github.com/padraic/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "time": "2015-04-02 19:54:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.1.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/631e365cf26bb2c078683e8d9bcf8bc631ac4d44", - "reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "~1.0", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "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": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.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": "2015-06-19 07:11:55" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.3.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "File/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "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": "2013-10-10 15:34:57" - }, - { - "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-21 13:50:34" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/83fe1bdc5d47658b727595c14da140da92b3d66d", - "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d", - "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": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2015-06-13 07:35:30" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9", - "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-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": "2015-06-19 03:43:16" - }, - { - "name": "phpunit/phpunit", - "version": "4.4.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "2e8580deebb7d1ac92ac878595e6bffe01069c2a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2e8580deebb7d1ac92ac878595e6bffe01069c2a", - "reference": "2e8580deebb7d1ac92ac878595e6bffe01069c2a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpunit/php-code-coverage": "~2.0", - "phpunit/php-file-iterator": "~1.3.2", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0.2", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.0", - "sebastian/diff": "~1.1", - "sebastian/environment": "~1.1", - "sebastian/exporter": "~1.1", - "sebastian/global-state": "~1.0", - "sebastian/recursion-context": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4.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": "2015-01-27 16:06:15" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "92408bb1968a81b3217a6fdf6c1a198da83caa35" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/92408bb1968a81b3217a6fdf6c1a198da83caa35", - "reference": "92408bb1968a81b3217a6fdf6c1a198da83caa35", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.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": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-06-11 15:55:48" - }, - { - "name": "sebastian/comparator", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.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": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-01-29 16:28:08" - }, - { - "name": "sebastian/diff", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-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": "http://www.github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-02-22 15:13:53" - }, - { - "name": "sebastian/environment", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.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": "2015-01-01 10:01:08" - }, - { - "name": "sebastian/exporter", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "84839970d05254c73cde183a721c7af13aede943" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", - "reference": "84839970d05254c73cde183a721c7af13aede943", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.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": "2015-01-27 07:23:06" - }, - { - "name": "sebastian/global-state", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "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": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2014-10-06 09:23:50" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "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": "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": "2015-01-24 09:48:32" - }, - { - "name": "sebastian/version", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "shasum": "" - }, - "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": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" - }, - { - "name": "symfony/yaml", - "version": "v2.7.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/9808e75c609a14f6db02f70fccf4ca4aab53c160", - "reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - } - }, - "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": "2015-06-10 15:30:22" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "phpdocumentor/reflection-common": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.5" - }, - "platform-dev": [] -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/easy-coding-standard.neon b/lib/composer/vendor/phpdocumentor/reflection-docblock/easy-coding-standard.neon new file mode 100644 index 00000000..7c2ba6e2 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/easy-coding-standard.neon @@ -0,0 +1,31 @@ +includes: + - temp/ecs/config/clean-code.neon + - temp/ecs/config/psr2-checkers.neon + - temp/ecs/config/spaces.neon + - temp/ecs/config/common.neon + +checkers: + PhpCsFixer\Fixer\Operator\ConcatSpaceFixer: + spacing: one + +parameters: + exclude_checkers: + # from temp/ecs/config/common.neon + - PhpCsFixer\Fixer\ClassNotation\OrderedClassElementsFixer + - PhpCsFixer\Fixer\PhpUnit\PhpUnitStrictFixer + - PhpCsFixer\Fixer\ControlStructure\YodaStyleFixer + # from temp/ecs/config/spaces.neon + - PhpCsFixer\Fixer\Operator\NotOperatorWithSuccessorSpaceFixer + + skip: + SlevomatCodingStandard\Sniffs\Classes\UnusedPrivateElementsSniff: + # WIP code + - src/DocBlock/StandardTagFactory.php + PHP_CodeSniffer\Standards\Generic\Sniffs\CodeAnalysis\EmptyStatementSniff: + # WIP code + - src/DocBlock/StandardTagFactory.php + PHP_CodeSniffer\Standards\Squiz\Sniffs\Classes\ValidClassNameSniff: + - src/DocBlock/Tags/Return_.php + - src/DocBlock/Tags/Var_.php + PHP_CodeSniffer\Standards\Generic\Sniffs\NamingConventions\CamelCapsFunctionNameSniff: + - */tests/** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php deleted file mode 100644 index 6d67dea4..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php +++ /dev/null @@ -1,27 +0,0 @@ -create($docComment); - -// Should contain the first line of the DocBlock -$summary = $docblock->getSummary(); - -// Contains an object of type Description; you can either cast it to string or use -// the render method to get a string representation of the Description. -// -// In subsequent examples we will be fiddling a bit more with the Description. -$description = $docblock->getDescription(); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php deleted file mode 100644 index 23995889..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php +++ /dev/null @@ -1,24 +0,0 @@ -create($docComment); - -// You can check if a DocBlock has one or more see tags -$hasSeeTag = $docblock->hasTag('see'); - -// Or we can get a complete list of all tags -$tags = $docblock->getTags(); - -// But we can also grab all tags of a specific type, such as `see` -$seeTags = $docblock->getTagsByName('see'); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php deleted file mode 100644 index 6bc10baf..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php +++ /dev/null @@ -1,27 +0,0 @@ -create($docComment); - -// Create the serializer that will reconstitute the DocBlock back to its original form. -$serializer = new Serializer(); - -// Reconstitution is performed by the `getDocComment()` method. -$reconstitutedDocComment = $serializer->getDocComment($docblock); - diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php deleted file mode 100644 index 026d6069..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php +++ /dev/null @@ -1,135 +0,0 @@ - Important: Tag classes that act as Factories using the `create` method should implement the TagFactory interface. - */ -final class MyTag extends BaseTag implements StaticMethod -{ - /** - * A required property that is used by Formatters to reconstitute the complete tag line. - * - * @see Formatter - * - * @var string - */ - protected $name = 'my-tag'; - - /** - * The constructor for this Tag; this should contain all properties for this object. - * - * @param Description $description An example of how to add a Description to the tag; the Description is often - * an optional variable so passing null is allowed in this instance (though you can - * also construct an empty description object). - * - * @see BaseTag for the declaration of the description property and getDescription method. - */ - public function __construct(Description $description = null) - { - $this->description = $description; - } - - /** - * A static Factory that creates a new instance of the current Tag. - * - * In this example the MyTag tag can be created by passing a description text as $body. Because we have added - * a $descriptionFactory that is type-hinted as DescriptionFactory we can now construct a new Description object - * and pass that to the constructor. - * - * > You could directly instantiate a Description object here but that won't be parsed for inline tags and Types - * > won't be resolved. The DescriptionFactory will take care of those actions. - * - * The `create` method's interface states that this method only features a single parameter (`$body`) but the - * {@see TagFactory} will read the signature of this method and if it has more parameters then it will try - * to find declarations for it in the ServiceLocator of the TagFactory (see {@see TagFactory::$serviceLocator}). - * - * > Important: all properties following the `$body` should default to `null`, otherwise PHP will error because - * > it no longer matches the interface. This is why you often see the default tags check that an optional argument - * > is not null nonetheless. - * - * @param string $body - * @param DescriptionFactory $descriptionFactory - * @param Context|null $context The Context is used to resolve Types and FQSENs, although optional - * it is highly recommended to pass it. If you omit it then it is assumed that - * the DocBlock is in the global namespace and has no `use` statements. - * - * @see Tag for the interface declaration of the `create` method. - * @see Tag::create() for more information on this method's workings. - * - * @return MyTag - */ - public static function create($body, DescriptionFactory $descriptionFactory = null, Context $context = null) - { - Assert::string($body); - Assert::notNull($descriptionFactory); - - return new static($descriptionFactory->create($body, $context)); - } - - /** - * Returns a rendition of the original tag line. - * - * This method is used to reconstitute a DocBlock into its original form by the {@see Serializer}. It should - * feature all parts of the tag so that the serializer can put it back together. - * - * @return string - */ - public function __toString() - { - return (string)$this->description; - } -} - -$docComment = << MyTag::class]; - -// Do pass the list of custom tags to the Factory for the DocBlockFactory. -$factory = DocBlockFactory::createInstance($customTags); -// You can also add Tags later using `$factory->registerTagHandler()` with a tag name and Tag class name. - -// Create the DocBlock -$docblock = $factory->create($docComment); - -// Take a look: the $customTagObjects now contain an array with your newly added tag -$customTagObjects = $docblock->getTagsByName('my-tag'); - -// As an experiment: let's reconstitute the DocBlock and observe that because we added a __toString() method -// to the tag class that we can now also see it. -$serializer = new Serializer(); -$reconstitutedDocComment = $serializer->getDocComment($docblock); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php deleted file mode 100644 index 5ec772fe..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php +++ /dev/null @@ -1,47 +0,0 @@ -create($docComment); - -// Escaping is automatic so this happens in the DescriptionFactory. -$description = $docblock->getDescription(); - -// This is the rendition that we will receive of the Description. -$receivedDocComment = <<render(); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist b/lib/composer/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist deleted file mode 100644 index 9abf85cf..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - 40 - - - diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist b/lib/composer/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist deleted file mode 100644 index 3c2e9a37..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - ./tests/unit - - - ./tests/integration - - - - - ./src/ - - - ./vendor/ - - - - - - diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php index 39911406..46605b78 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php @@ -24,7 +24,7 @@ final class DocBlock private $description = null; /** @var Tag[] An array containing all the tags in this docblock; except inline. */ - private $tags = array(); + private $tags = []; /** @var Types\Context Information about the context of this DocBlock. */ private $context = null; @@ -55,8 +55,7 @@ final class DocBlock Location $location = null, $isTemplateStart = false, $isTemplateEnd = false - ) - { + ) { Assert::string($summary); Assert::boolean($isTemplateStart); Assert::boolean($isTemplateEnd); @@ -171,11 +170,11 @@ final class DocBlock { Assert::string($name); - $result = array(); + $result = []; /** @var Tag $tag */ foreach ($this->getTags() as $tag) { - if ($tag->getName() != $name) { + if ($tag->getName() !== $name) { continue; } @@ -198,7 +197,7 @@ final class DocBlock /** @var Tag $tag */ foreach ($this->getTags() as $tag) { - if ($tag->getName() == $name) { + if ($tag->getName() === $name) { return true; } } @@ -206,6 +205,23 @@ final class DocBlock return false; } + /** + * Remove a tag from this DocBlock. + * + * @param Tag $tag The tag to remove. + * + * @return void + */ + public function removeTag(Tag $tagToRemove) + { + foreach ($this->tags as $key => $tag) { + if ($tag === $tagToRemove) { + unset($this->tags[$key]); + break; + } + } + } + /** * Adds a tag to this DocBlock. * diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php index d1d7fc64..25a79e00 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php @@ -70,6 +70,16 @@ class Description $this->tags = $tags; } + /** + * Returns the tags for this DocBlock. + * + * @return Tag[] + */ + public function getTags() + { + return $this->tags; + } + /** * Renders this description as a string where the provided formatter will format the tags in the expected string * format. @@ -88,6 +98,7 @@ class Description foreach ($this->tags as $tag) { $tags[] = '{' . $formatter->format($tag) . '}'; } + return vsprintf($this->bodyTemplate, $tags); } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php index f34d0f7e..48f9c219 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php @@ -188,5 +188,4 @@ class DescriptionFactory return implode("\n", $lines); } - } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php index 3cc5dab3..571ed749 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php @@ -10,7 +10,7 @@ * @link http://phpdoc.org */ -namespace phpDocumentor\Reflection; +namespace phpDocumentor\Reflection\DocBlock; use phpDocumentor\Reflection\DocBlock\Tags\Example; @@ -23,7 +23,7 @@ class ExampleFinder private $sourceDirectory = ''; /** @var string[] */ - private $exampleDirectories = array(); + private $exampleDirectories = []; /** * Attempts to find the example contents for the given descriptor. diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php index 7f1c89d3..007c9393 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php @@ -32,6 +32,9 @@ class Serializer /** @var int|null The max length of a line. */ protected $lineLength = null; + /** @var DocBlock\Tags\Formatter A custom tag formatter. */ + protected $tagFormatter = null; + /** * Create a Serializer instance. * @@ -39,18 +42,21 @@ class Serializer * @param string $indentString The string to indent the comment with. * @param bool $indentFirstLine Whether to indent the first line. * @param int|null $lineLength The max length of a line or NULL to disable line wrapping. + * @param DocBlock\Tags\Formatter $tagFormatter A custom tag formatter, defaults to PassthroughFormatter. */ - public function __construct($indent = 0, $indentString = ' ', $indentFirstLine = true, $lineLength = null) + public function __construct($indent = 0, $indentString = ' ', $indentFirstLine = true, $lineLength = null, $tagFormatter = null) { Assert::integer($indent); Assert::string($indentString); Assert::boolean($indentFirstLine); Assert::nullOrInteger($lineLength); + Assert::nullOrIsInstanceOf($tagFormatter, 'phpDocumentor\Reflection\DocBlock\Tags\Formatter'); $this->indent = $indent; $this->indentString = $indentString; $this->isFirstLineIndented = $indentFirstLine; $this->lineLength = $lineLength; + $this->tagFormatter = $tagFormatter ?: new DocBlock\Tags\Formatter\PassthroughFormatter(); } /** @@ -115,6 +121,7 @@ class Serializer $text = wordwrap($text, $wrapLength); return $text; } + return $text; } @@ -128,11 +135,11 @@ class Serializer private function addTagBlock(DocBlock $docblock, $wrapLength, $indent, $comment) { foreach ($docblock->getTags() as $tag) { - $formatter = new DocBlock\Tags\Formatter\PassthroughFormatter(); - $tagText = $formatter->format($tag); + $tagText = $this->tagFormatter->format($tag); if ($wrapLength !== null) { $tagText = wordwrap($tagText, $wrapLength); } + $tagText = str_replace("\n", "\n{$indent} * ", $tagText); $comment .= "{$indent} * {$tagText}\n"; diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php index 0a656466..5a8143cf 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php @@ -113,6 +113,12 @@ final class StandardTagFactory implements TagFactory list($tagName, $tagBody) = $this->extractTagParts($tagLine); + if ($tagBody !== '' && $tagBody[0] === '[') { + throw new \InvalidArgumentException( + 'The tag "' . $tagLine . '" does not seem to be wellformed, please check it for errors' + ); + } + return $this->createTag($tagBody, $tagName, $context); } @@ -160,8 +166,8 @@ final class StandardTagFactory implements TagFactory */ private function extractTagParts($tagLine) { - $matches = array(); - if (! preg_match('/^@(' . self::REGEX_TAGNAME . ')(?:\s*([^\s].*)|$)?/us', $tagLine, $matches)) { + $matches = []; + if (! preg_match('/^@(' . self::REGEX_TAGNAME . ')(?:\s*([^\s].*)|$)/us', $tagLine, $matches)) { throw new \InvalidArgumentException( 'The tag "' . $tagLine . '" does not seem to be wellformed, please check it for errors' ); @@ -190,8 +196,7 @@ final class StandardTagFactory implements TagFactory $arguments = $this->getArgumentsForParametersFromWiring( $this->fetchParametersForHandlerFactoryMethod($handlerClassName), $this->getServiceLocatorWithDynamicParameters($context, $name, $body) - ) - ; + ); return call_user_func_array([$handlerClassName, 'create'], $arguments); } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php index 41a27886..29d7f1de 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php @@ -73,7 +73,7 @@ final class Author extends BaseTag implements Factory\StaticMethod */ public function __toString() { - return $this->authorName . '<' . $this->authorEmail . '>'; + return $this->authorName . (strlen($this->authorEmail) ? ' <' . $this->authorEmail . '>' : ''); } /** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php index 31b4f82c..8d65403f 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php @@ -12,11 +12,11 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; +use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\Types\Context as TypeContext; use phpDocumentor\Reflection\FqsenResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; use Webmozart\Assert\Assert; /** @@ -49,8 +49,7 @@ final class Covers extends BaseTag implements Factory\StaticMethod DescriptionFactory $descriptionFactory = null, FqsenResolver $resolver = null, TypeContext $context = null - ) - { + ) { Assert::string($body); Assert::notEmpty($body); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php index 7c1039fa..822c3050 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php @@ -12,9 +12,9 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; -use phpDocumentor\Reflection\Types\Context as TypeContext; use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Types\Context as TypeContext; use Webmozart\Assert\Assert; /** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php index 571ef8df..ecb199b4 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php @@ -12,7 +12,9 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; +use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\Tag; +use Webmozart\Assert\Assert; /** * Reflection class for a {@}example tag in a Docblock. @@ -22,7 +24,7 @@ final class Example extends BaseTag /** * @var string Path to a file to use as an example. May also be an absolute URI. */ - private $filePath = ''; + private $filePath; /** * @var bool Whether the file path component represents an URI. This determines how the file portion @@ -30,6 +32,33 @@ final class Example extends BaseTag */ private $isURI = false; + /** + * @var int + */ + private $startingLine; + + /** + * @var int + */ + private $lineCount; + + public function __construct($filePath, $isURI, $startingLine, $lineCount, $description) + { + Assert::notEmpty($filePath); + Assert::integer($startingLine); + Assert::greaterThanEq($startingLine, 0); + + $this->filePath = $filePath; + $this->startingLine = $startingLine; + $this->lineCount = $lineCount; + $this->name = 'example'; + if ($description !== null) { + $this->description = trim($description); + } + + $this->isURI = $isURI; + } + /** * {@inheritdoc} */ @@ -43,7 +72,7 @@ final class Example extends BaseTag :$this->filePath; } - $this->description = $filePath . ' ' . parent::getContent(); + return trim($filePath . ' ' . parent::getDescription()); } return $this->description; @@ -71,16 +100,29 @@ final class Example extends BaseTag $lineCount = null; $description = null; - // Starting line / Number of lines / Description - if (preg_match('/^([1-9]\d*)\s*(?:((?1))\s+)?(.*)$/sux', $matches[3], $matches)) { - $startingLine = (int)$matches[1]; - if (isset($matches[2]) && $matches[2] !== '') { - $lineCount = (int)$matches[2]; - } + if (array_key_exists(3, $matches)) { $description = $matches[3]; + + // Starting line / Number of lines / Description + if (preg_match('/^([1-9]\d*)(?:\s+((?1))\s*)?(.*)$/sux', $matches[3], $contentMatches)) { + $startingLine = (int)$contentMatches[1]; + if (isset($contentMatches[2]) && $contentMatches[2] !== '') { + $lineCount = (int)$contentMatches[2]; + } + + if (array_key_exists(3, $contentMatches)) { + $description = $contentMatches[3]; + } + } } - return new static($filePath, $fileUri, $startingLine, $lineCount, $description); + return new static( + $filePath !== null?$filePath:$fileUri, + $fileUri !== null, + $startingLine, + $lineCount, + $description + ); } /** @@ -94,46 +136,6 @@ final class Example extends BaseTag return $this->filePath; } - /** - * Sets the file path. - * - * @param string $filePath The new file path to use for the example. - * - * @return $this - */ - public function setFilePath($filePath) - { - $this->isURI = false; - $this->filePath = trim($filePath); - - $this->description = null; - return $this; - } - - /** - * Sets the file path as an URI. - * - * This function is equivalent to {@link setFilePath()}, except that it - * converts an URI to a file path before that. - * - * There is no getFileURI(), as {@link getFilePath()} is compatible. - * - * @param string $uri The new file URI to use as an example. - * - * @return $this - */ - public function setFileURI($uri) - { - $this->isURI = true; - $this->description = null; - - $this->filePath = $this->isUriRelative($uri) - ? rawurldecode(str_replace(array('/', '\\'), '%2F', $uri)) - : $this->filePath = $uri; - - return $this; - } - /** * Returns a string representation for this tag. * @@ -141,7 +143,7 @@ final class Example extends BaseTag */ public function __toString() { - return $this->filePath . ($this->description ? ' ' . $this->description->render() : ''); + return $this->filePath . ($this->description ? ' ' . $this->description : ''); } /** @@ -155,4 +157,20 @@ final class Example extends BaseTag { return false === strpos($uri, ':'); } + + /** + * @return int + */ + public function getStartingLine() + { + return $this->startingLine; + } + + /** + * @return int + */ + public function getLineCount() + { + return $this->lineCount; + } } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php new file mode 100644 index 00000000..ceb40cc3 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php @@ -0,0 +1,47 @@ + + * @copyright 2017 Mike van Riel + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Formatter; + +use phpDocumentor\Reflection\DocBlock\Tag; +use phpDocumentor\Reflection\DocBlock\Tags\Formatter; + +class AlignFormatter implements Formatter +{ + /** @var int The maximum tag name length. */ + protected $maxLen = 0; + + /** + * Constructor. + * + * @param Tag[] $tags All tags that should later be aligned with the formatter. + */ + public function __construct(array $tags) + { + foreach ($tags as $tag) { + $this->maxLen = max($this->maxLen, strlen($tag->getName())); + } + } + + /** + * Formats the given tag to return a simple plain text version. + * + * @param Tag $tag + * + * @return string + */ + public function format(Tag $tag) + { + return '@' . $tag->getName() . str_repeat(' ', $this->maxLen - strlen($tag->getName()) + 1) . (string)$tag; + } +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php index aa97572c..4e2c5762 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php @@ -26,6 +26,6 @@ class PassthroughFormatter implements Formatter */ public function format(Tag $tag) { - return '@' . $tag->getName() . ' ' . (string)$tag; + return trim('@' . $tag->getName() . ' ' . (string)$tag); } } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php index d600aaaa..75225299 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php @@ -91,11 +91,15 @@ final class Method extends BaseTag implements Factory\StaticMethod )? # Return type (?: - ( - (?:[\w\|_\\\\]+) - # array notation - (?:\[\])* - )? + ( + (?:[\w\|_\\\\]*\$this[\w\|_\\\\]*) + | + (?: + (?:[\w\|_\\\\]+) + # array notation + (?:\[\])* + )* + ) \s+ )? # Legacy method name (not captured) @@ -121,12 +125,17 @@ final class Method extends BaseTag implements Factory\StaticMethod list(, $static, $returnType, $methodName, $arguments, $description) = $matches; $static = $static === 'static'; + + if ($returnType === '') { + $returnType = 'void'; + } + $returnType = $typeResolver->resolve($returnType, $context); $description = $descriptionFactory->create($description, $context); - if ('' !== $arguments) { + if (is_string($arguments) && strlen($arguments) > 0) { $arguments = explode(',', $arguments); - foreach($arguments as &$argument) { + foreach ($arguments as &$argument) { $argument = explode(' ', self::stripRestArg(trim($argument)), 2); if ($argument[0][0] === '$') { $argumentName = substr($argument[0], 1); @@ -192,11 +201,11 @@ final class Method extends BaseTag implements Factory\StaticMethod $arguments[] = $argument['type'] . ' $' . $argument['name']; } - return ($this->isStatic() ? 'static ' : '') + return trim(($this->isStatic() ? 'static ' : '') . (string)$this->returnType . ' ' . $this->methodName . '(' . implode(', ', $arguments) . ')' - . ($this->description ? ' ' . $this->description->render() : ''); + . ($this->description ? ' ' . $this->description->render() : '')); } private function filterArguments($arguments) @@ -205,10 +214,13 @@ final class Method extends BaseTag implements Factory\StaticMethod if (is_string($argument)) { $argument = [ 'name' => $argument ]; } + if (! isset($argument['type'])) { $argument['type'] = new Void_(); } + $keys = array_keys($argument); + sort($keys); if ($keys !== [ 'name', 'type' ]) { throw new \InvalidArgumentException( 'Arguments can only have the "name" and "type" fields, found: ' . var_export($keys, true) diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php index 1a51dc0d..7d699d88 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php @@ -77,7 +77,7 @@ final class Param extends BaseTag implements Factory\StaticMethod } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$' || substr($parts[0], 0, 4) === '...$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$' || substr($parts[0], 0, 4) === '...$')) { $variableName = array_shift($parts); array_shift($parts); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php index 3c597133..f0ef7c07 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php @@ -70,7 +70,7 @@ class Property extends BaseTag implements Factory\StaticMethod } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$')) { $variableName = array_shift($parts); array_shift($parts); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php index bf2b8056..e41c0c1c 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php @@ -70,7 +70,7 @@ class PropertyRead extends BaseTag implements Factory\StaticMethod } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$')) { $variableName = array_shift($parts); array_shift($parts); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php index db37e0fb..cfdb0ed0 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php @@ -70,7 +70,7 @@ class PropertyWrite extends BaseTag implements Factory\StaticMethod } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$')) { $variableName = array_shift($parts); array_shift($parts); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php new file mode 100644 index 00000000..dc7b8b6d --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php @@ -0,0 +1,42 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Reference; + +use phpDocumentor\Reflection\Fqsen as RealFqsen; + +/** + * Fqsen reference used by {@see phpDocumentor\Reflection\DocBlock\Tags\See} + */ +final class Fqsen implements Reference +{ + /** + * @var RealFqsen + */ + private $fqsen; + + /** + * Fqsen constructor. + */ + public function __construct(RealFqsen $fqsen) + { + $this->fqsen = $fqsen; + } + + /** + * @return string string representation of the referenced fqsen + */ + public function __toString() + { + return (string)$this->fqsen; + } +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php new file mode 100644 index 00000000..a3ffd24c --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php @@ -0,0 +1,21 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Reference; + +/** + * Interface for references in {@see phpDocumentor\Reflection\DocBlock\Tags\See} + */ +interface Reference +{ + public function __toString(); +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php new file mode 100644 index 00000000..2671d5e1 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php @@ -0,0 +1,40 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Reference; + +use Webmozart\Assert\Assert; + +/** + * Url reference used by {@see phpDocumentor\Reflection\DocBlock\Tags\See} + */ +final class Url implements Reference +{ + /** + * @var string + */ + private $uri; + + /** + * Url constructor. + */ + public function __construct($uri) + { + Assert::stringNotEmpty($uri); + $this->uri = $uri; + } + + public function __toString() + { + return $this->uri; + } +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php index 09a5870e..ca5bda70 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php @@ -43,8 +43,7 @@ final class Return_ extends BaseTag implements Factory\StaticMethod TypeResolver $typeResolver = null, DescriptionFactory $descriptionFactory = null, TypeContext $context = null - ) - { + ) { Assert::string($body); Assert::allNotNull([$typeResolver, $descriptionFactory]); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php index 64ee3d8e..9e9e723b 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php @@ -12,11 +12,13 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; +use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Fqsen; +use phpDocumentor\Reflection\DocBlock\Tags\Reference\Fqsen as FqsenRef; +use phpDocumentor\Reflection\DocBlock\Tags\Reference\Reference; +use phpDocumentor\Reflection\DocBlock\Tags\Reference\Url; use phpDocumentor\Reflection\FqsenResolver; use phpDocumentor\Reflection\Types\Context as TypeContext; -use phpDocumentor\Reflection\DocBlock\Description; use Webmozart\Assert\Assert; /** @@ -26,16 +28,16 @@ class See extends BaseTag implements Factory\StaticMethod { protected $name = 'see'; - /** @var Fqsen */ + /** @var Reference */ protected $refers = null; /** * Initializes this tag. * - * @param Fqsen $refers + * @param Reference $refers * @param Description $description */ - public function __construct(Fqsen $refers, Description $description = null) + public function __construct(Reference $refers, Description $description = null) { $this->refers = $refers; $this->description = $description; @@ -56,13 +58,18 @@ class See extends BaseTag implements Factory\StaticMethod $parts = preg_split('/\s+/Su', $body, 2); $description = isset($parts[1]) ? $descriptionFactory->create($parts[1], $context) : null; - return new static($resolver->resolve($parts[0], $context), $description); + // https://tools.ietf.org/html/rfc2396#section-3 + if (preg_match('/\w:\/\/\w/i', $parts[0])) { + return new static(new Url($parts[0]), $description); + } + + return new static(new FqsenRef($resolver->resolve($parts[0], $context)), $description); } /** - * Returns the structural element this tag refers to. + * Returns the ref of this tag. * - * @return Fqsen + * @return Reference */ public function getReference() { diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php index 3d002ed3..835fb0dc 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php @@ -12,9 +12,9 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; -use phpDocumentor\Reflection\Types\Context as TypeContext; use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Types\Context as TypeContext; use Webmozart\Assert\Assert; /** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php index b0646b96..247b1b3b 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php @@ -59,6 +59,7 @@ final class Source extends BaseTag implements Factory\StaticMethod if (isset($matches[2]) && $matches[2] !== '') { $lineCount = (int)$matches[2]; } + $description = $matches[3]; } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php index e23c694b..8907c951 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php @@ -70,7 +70,7 @@ class Var_ extends BaseTag implements Factory\StaticMethod } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$')) { $variableName = array_shift($parts); array_shift($parts); @@ -112,7 +112,7 @@ class Var_ extends BaseTag implements Factory\StaticMethod public function __toString() { return ($this->type ? $this->type . ' ' : '') - . '$' . $this->variableName - . ($this->description ? ' ' . $this->description : ''); + . (empty($this->variableName) ? null : ('$' . $this->variableName)) + . ($this->description ? ' ' . $this->description : ''); } } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php index 3e0e5bef..7bb04207 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php @@ -12,9 +12,9 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; -use phpDocumentor\Reflection\Types\Context as TypeContext; use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Types\Context as TypeContext; use Webmozart\Assert\Assert; /** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php index 9ec2455d..1bdb8f4d 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php @@ -93,7 +93,7 @@ final class DocBlockFactory implements DocBlockFactoryInterface return new DocBlock( $summary, $description ? $this->descriptionFactory->create($description, $context) : null, - array_filter($this->parseTagBlock($tags, $context), function($tag) { + array_filter($this->parseTagBlock($tags, $context), function ($tag) { return $tag instanceof Tag; }), $context, @@ -120,11 +120,11 @@ final class DocBlockFactory implements DocBlockFactoryInterface $comment = trim(preg_replace('#[ \t]*(?:\/\*\*|\*\/|\*)?[ \t]{0,1}(.*)?#u', '$1', $comment)); // reg ex above is not able to remove */ from a single line docblock - if (substr($comment, -2) == '*/') { + if (substr($comment, -2) === '*/') { $comment = trim(substr($comment, 0, -2)); } - return str_replace(array("\r\n", "\r"), "\n", $comment); + return str_replace(["\r\n", "\r"], "\n", $comment); } /** @@ -143,7 +143,7 @@ final class DocBlockFactory implements DocBlockFactoryInterface // method does not split tags so we return this verbatim as the fourth result (tags). This saves us the // performance impact of running a regular expression if (strpos($comment, '@') === 0) { - return array('', '', '', $comment); + return ['', '', '', $comment]; } // clears all extra horizontal whitespace from the line endings to prevent parsing issues @@ -241,7 +241,7 @@ final class DocBlockFactory implements DocBlockFactoryInterface */ private function splitTagBlockIntoTagLines($tags) { - $result = array(); + $result = []; foreach (explode("\n", $tags) as $tag_line) { if (isset($tag_line[0]) && ($tag_line[0] === '@')) { $result[] = $tag_line; diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/InterpretingDocBlocksTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/InterpretingDocBlocksTest.php deleted file mode 100644 index 91b8eb36..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/InterpretingDocBlocksTest.php +++ /dev/null @@ -1,97 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\StandardTagFactory; -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Tags\See; - -/** - * @coversNothing - */ -class InterpretingDocBlocksTest extends \PHPUnit_Framework_TestCase -{ - public function testInterpretingASimpleDocBlock() - { - /** - * @var DocBlock $docblock - * @var string $summary - * @var Description $description - */ - include(__DIR__ . '/../../examples/01-interpreting-a-simple-docblock.php'); - - $descriptionText = <<assertInstanceOf(DocBlock::class, $docblock); - $this->assertSame('This is an example of a summary.', $summary); - $this->assertInstanceOf(Description::class, $description); - $this->assertSame($descriptionText, $description->render()); - $this->assertEmpty($docblock->getTags()); - } - - public function testInterpretingTags() - { - /** - * @var DocBlock $docblock - * @var boolean $hasSeeTag - * @var Tag[] $tags - * @var See[] $seeTags - */ - include(__DIR__ . '/../../examples/02-interpreting-tags.php'); - - $this->assertTrue($hasSeeTag); - $this->assertCount(1, $tags); - $this->assertCount(1, $seeTags); - - $this->assertInstanceOf(See::class, $tags[0]); - $this->assertInstanceOf(See::class, $seeTags[0]); - - $seeTag = $seeTags[0]; - $this->assertSame('\\' . StandardTagFactory::class, (string)$seeTag->getReference()); - $this->assertSame('', (string)$seeTag->getDescription()); - } - - public function testDescriptionsCanEscapeAtSignsAndClosingBraces() - { - /** - * @var string $docComment - * @var DocBlock $docblock - * @var Description $description - * @var string $receivedDocComment - * @var string $foundDescription - */ - - include(__DIR__ . '/../../examples/playing-with-descriptions/02-escaping.php'); - $this->assertSame(<<<'DESCRIPTION' -You can escape the @-sign by surrounding it with braces, for example: @. And escape a closing brace within an -inline tag by adding an opening brace in front of it like this: }. - -Here are example texts where you can see how they could be used in a real life situation: - - This is a text with an {@internal inline tag where a closing brace (}) is shown}. - Or an {@internal inline tag with a literal {@link} in it}. - -Do note that an {@internal inline tag that has an opening brace ({) does not break out}. -DESCRIPTION - , - $foundDescription - ) - ; - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/ReconstitutingADocBlockTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/ReconstitutingADocBlockTest.php deleted file mode 100644 index 92ac22ed..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/ReconstitutingADocBlockTest.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\StandardTagFactory; -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Tags\See; - -/** - * @coversNothing - */ -class ReconstitutingADocBlockTest extends \PHPUnit_Framework_TestCase -{ - public function testReconstituteADocBlock() - { - /** - * @var string $docComment - * @var string $reconstitutedDocComment - */ - include(__DIR__ . '/../../examples/03-reconstituting-a-docblock.php'); - - $this->assertSame($docComment, $reconstitutedDocComment); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/UsingTagsTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/UsingTagsTest.php deleted file mode 100644 index 984811b1..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/UsingTagsTest.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\StandardTagFactory; -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Tags\See; - -/** - * @coversNothing - */ -class UsingTagsTest extends \PHPUnit_Framework_TestCase -{ - public function testAddingYourOwnTagUsingAStaticMethodAsFactory() - { - /** - * @var object[] $customTagObjects - * @var string $docComment - * @var string $reconstitutedDocComment - */ - include(__DIR__ . '/../../examples/04-adding-your-own-tag.php'); - - $this->assertInstanceOf(\MyTag::class, $customTagObjects[0]); - $this->assertSame('my-tag', $customTagObjects[0]->getName()); - $this->assertSame('I have a description', (string)$customTagObjects[0]->getDescription()); - $this->assertSame($docComment, $reconstitutedDocComment); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionFactoryTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionFactoryTest.php deleted file mode 100644 index d3043f9a..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionFactoryTest.php +++ /dev/null @@ -1,174 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Tags\Link; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @covers :: - */ -class DescriptionFactoryTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - * @dataProvider provideSimpleExampleDescriptions - */ - public function testDescriptionCanParseASimpleString($contents) - { - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create')->never(); - - $factory = new DescriptionFactory($tagFactory); - $description = $factory->create($contents, new Context('')); - - $this->assertSame($contents, $description->render()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - * @dataProvider provideEscapeSequences - */ - public function testEscapeSequences($contents, $expected) - { - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create')->never(); - - $factory = new DescriptionFactory($tagFactory); - $description = $factory->create($contents, new Context('')); - - $this->assertSame($expected, $description->render()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Link - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testDescriptionCanParseAStringWithInlineTag() - { - $contents = 'This is text for a {@link http://phpdoc.org/ description} that uses an inline tag.'; - $context = new Context(''); - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create') - ->once() - ->with('@link http://phpdoc.org/ description', $context) - ->andReturn(new Link('http://phpdoc.org/', new Description('description'))) - ; - - $factory = new DescriptionFactory($tagFactory); - $description = $factory->create($contents, $context); - - $this->assertSame($contents, $description->render()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Link - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testDescriptionCanParseAStringStartingWithInlineTag() - { - $contents = '{@link http://phpdoc.org/ This} is text for a description that starts with an inline tag.'; - $context = new Context(''); - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create') - ->once() - ->with('@link http://phpdoc.org/ This', $context) - ->andReturn(new Link('http://phpdoc.org/', new Description('This'))) - ; - - $factory = new DescriptionFactory($tagFactory); - $description = $factory->create($contents, $context); - - $this->assertSame($contents, $description->render()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testIfSuperfluousStartingSpacesAreRemoved() - { - $factory = new DescriptionFactory(m::mock(TagFactory::class)); - $descriptionText = <<create($descriptionText, new Context('')); - - $this->assertSame($expectedDescription, $description->render()); - } - - /** - * Provides a series of example strings that the parser should correctly interpret and return. - * - * @return string[][] - */ - public function provideSimpleExampleDescriptions() - { - return [ - ['This is text for a description.'], - ['This is text for a description containing { that is literal.'], - ['This is text for a description containing } that is literal.'], - ['This is text for a description with {just a text} that is not a tag.'], - ]; - } - - public function provideEscapeSequences() - { - return [ - ['This is text for a description with a {@}.', 'This is text for a description with a @.'], - ['This is text for a description with a {}.', 'This is text for a description with a }.'], - ]; - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionTest.php deleted file mode 100644 index b5917a9e..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionTest.php +++ /dev/null @@ -1,75 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter; -use phpDocumentor\Reflection\DocBlock\Tags\Generic; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Description - */ -class DescriptionTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::render - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - */ - public function testDescriptionCanRenderUsingABodyWithPlaceholdersAndTags() - { - $body = 'This is a %1$s body.'; - $expected = 'This is a {@internal significant } body.'; - $tags = [new Generic('internal', new Description('significant '))]; - - $fixture = new Description($body, $tags); - - // without formatter (thus the PassthroughFormatter by default) - $this->assertSame($expected, $fixture->render()); - - // with a custom formatter - $formatter = m::mock(PassthroughFormatter::class); - $formatter->shouldReceive('format')->with($tags[0])->andReturn('@internal significant '); - $this->assertSame($expected, $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::render - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - */ - public function testDescriptionCanBeCastToString() - { - $body = 'This is a %1$s body.'; - $expected = 'This is a {@internal significant } body.'; - $tags = [new Generic('internal', new Description('significant '))]; - - $fixture = new Description($body, $tags); - - $this->assertSame($expected, (string)$fixture); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testBodyTemplateMustBeAString() - { - new Description([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/SerializerTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/SerializerTest.php deleted file mode 100644 index cb2b400f..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/SerializerTest.php +++ /dev/null @@ -1,201 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Serializer - * @covers :: - */ -class SerializerTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::getDocComment - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\DocBlock - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testReconstructsADocCommentFromADocBlock() - { - $expected = <<<'DOCCOMMENT' -/** - * This is a summary - * - * This is a description - * - * @unknown-tag Test description for the unknown tag - */ -DOCCOMMENT; - - $fixture = new Serializer(); - - $docBlock = new DocBlock( - 'This is a summary', - new Description('This is a description'), - [ - new DocBlock\Tags\Generic('unknown-tag', new Description('Test description for the unknown tag')) - ] - ); - - $this->assertSame($expected, $fixture->getDocComment($docBlock)); - } - - /** - * @covers ::__construct - * @covers ::getDocComment - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\DocBlock - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testAddPrefixToDocBlock() - { - $expected = <<<'DOCCOMMENT' -aa/** -aa * This is a summary -aa * -aa * This is a description -aa * -aa * @unknown-tag Test description for the unknown tag -aa */ -DOCCOMMENT; - - $fixture = new Serializer(2, 'a'); - - $docBlock = new DocBlock( - 'This is a summary', - new Description('This is a description'), - [ - new DocBlock\Tags\Generic('unknown-tag', new Description('Test description for the unknown tag')) - ] - ); - - $this->assertSame($expected, $fixture->getDocComment($docBlock)); - } - - /** - * @covers ::__construct - * @covers ::getDocComment - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\DocBlock - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testAddPrefixToDocBlockExceptFirstLine() - { - $expected = <<<'DOCCOMMENT' -/** -aa * This is a summary -aa * -aa * This is a description -aa * -aa * @unknown-tag Test description for the unknown tag -aa */ -DOCCOMMENT; - - $fixture = new Serializer(2, 'a', false); - - $docBlock = new DocBlock( - 'This is a summary', - new Description('This is a description'), - [ - new DocBlock\Tags\Generic('unknown-tag', new Description('Test description for the unknown tag')) - ] - ); - - $this->assertSame($expected, $fixture->getDocComment($docBlock)); - } - - /** - * @covers ::__construct - * @covers ::getDocComment - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\DocBlock - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testWordwrapsAroundTheGivenAmountOfCharacters() - { - $expected = <<<'DOCCOMMENT' -/** - * This is a - * summary - * - * This is a - * description - * - * @unknown-tag - * Test - * description - * for the - * unknown tag - */ -DOCCOMMENT; - - $fixture = new Serializer(0, '', true, 15); - - $docBlock = new DocBlock( - 'This is a summary', - new Description('This is a description'), - [ - new DocBlock\Tags\Generic('unknown-tag', new Description('Test description for the unknown tag')) - ] - ); - - $this->assertSame($expected, $fixture->getDocComment($docBlock)); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfIndentIsNotAnInteger() - { - new Serializer([]); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfIndentStringIsNotAString() - { - new Serializer(0, []); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfIndentFirstLineIsNotABoolean() - { - new Serializer(0, '', []); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfLineLengthIsNotNullNorAnInteger() - { - new Serializer(0, '', false, []); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/StandardTagFactoryTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/StandardTagFactoryTest.php deleted file mode 100644 index 0247da04..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/StandardTagFactoryTest.php +++ /dev/null @@ -1,361 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Tags\Author; -use phpDocumentor\Reflection\DocBlock\Tags\Formatter; -use phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter; -use phpDocumentor\Reflection\DocBlock\Tags\Generic; -use phpDocumentor\Reflection\DocBlock\Tags\Return_; -use phpDocumentor\Reflection\DocBlock\Tags\See; -use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\FqsenResolver; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass phpDocumentor\Reflection\DocBlock\StandardTagFactory - * @covers :: - */ -class StandardTagFactoryTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testCreatingAGenericTag() - { - $expectedTagName = 'unknown-tag'; - $expectedDescriptionText = 'This is a description'; - $expectedDescription = new Description($expectedDescriptionText); - $context = new Context(''); - - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory - ->shouldReceive('create') - ->once() - ->with($expectedDescriptionText, $context) - ->andReturn($expectedDescription) - ; - - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class)); - $tagFactory->addService($descriptionFactory, DescriptionFactory::class); - - /** @var Generic $tag */ - $tag = $tagFactory->create('@' . $expectedTagName . ' This is a description', $context); - - $this->assertInstanceOf(Generic::class, $tag); - $this->assertSame($expectedTagName, $tag->getName()); - $this->assertSame($expectedDescription, $tag->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\Tags\Author - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - */ - public function testCreatingASpecificTag() - { - $context = new Context(''); - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class)); - - /** @var Author $tag */ - $tag = $tagFactory->create('@author Mike van Riel ', $context); - - $this->assertInstanceOf(Author::class, $tag); - $this->assertSame('author', $tag->getName()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\Tags\See - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - */ - public function testAnEmptyContextIsCreatedIfNoneIsProvided() - { - $fqsen = '\Tag'; - $resolver = m::mock(FqsenResolver::class) - ->shouldReceive('resolve') - ->with('Tag', m::type(Context::class)) - ->andReturn(new Fqsen($fqsen)) - ->getMock() - ; - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldIgnoreMissing(); - - $tagFactory = new StandardTagFactory($resolver); - $tagFactory->addService($descriptionFactory, DescriptionFactory::class); - - /** @var See $tag */ - $tag = $tagFactory->create('@see Tag'); - - $this->assertInstanceOf(See::class, $tag); - $this->assertSame($fqsen, (string)$tag->getReference()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\Tags\Author - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - */ - public function testPassingYourOwnSetOfTagHandlers() - { - $context = new Context(''); - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class), ['user' => Author::class]); - - /** @var Author $tag */ - $tag = $tagFactory->create('@user Mike van Riel ', $context); - - $this->assertInstanceOf(Author::class, $tag); - $this->assertSame('author', $tag->getName()); - } - - /** - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage The tag "@user/myuser" does not seem to be wellformed, please check it for errors - */ - public function testExceptionIsThrownIfProvidedTagIsNotWellformed() - { - $this->markTestIncomplete( - 'For some reason this test fails; once I have access to a RegEx analyzer I will have to test the regex' - ) - ; - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class)); - $tagFactory->create('@user[myuser'); - } - - /** - * @covers ::__construct - * @covers ::addParameter - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - */ - public function testAddParameterToServiceLocator() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - $tagFactory->addParameter('myParam', 'myValue'); - - $this->assertAttributeSame( - [FqsenResolver::class => $resolver, 'myParam' => 'myValue'], - 'serviceLocator', - $tagFactory - ) - ; - } - - /** - * @covers ::addService - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - */ - public function testAddServiceToServiceLocator() - { - $service = new PassthroughFormatter(); - - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - $tagFactory->addService($service); - - $this->assertAttributeSame( - [FqsenResolver::class => $resolver, PassthroughFormatter::class => $service], - 'serviceLocator', - $tagFactory - ) - ; - } - - /** - * @covers ::addService - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - */ - public function testInjectConcreteServiceForInterfaceToServiceLocator() - { - $interfaceName = Formatter::class; - $service = new PassthroughFormatter(); - - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - $tagFactory->addService($service, $interfaceName); - - $this->assertAttributeSame( - [FqsenResolver::class => $resolver, $interfaceName => $service], - 'serviceLocator', - $tagFactory - ) - ; - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::create - * @uses phpDocumentor\Reflection\DocBlock\Tags\Author - */ - public function testRegisteringAHandlerForANewTag() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', Author::class); - - // Assert by trying to create one - $tag = $tagFactory->create('@my-tag Mike van Riel '); - $this->assertInstanceOf(Author::class, $tag); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedTagNameIsNotAString() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler([], Author::class); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedTagNameIsEmpty() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('', Author::class); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedTagNameIsNamespaceButNotFullyQualified() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('Name\Spaced\Tag', Author::class); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedHandlerIsNotAString() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', []); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedHandlerIsEmpty() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', ''); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedHandlerIsNotAnExistingClassName() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', 'IDoNotExist'); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedHandlerDoesNotImplementTheTagInterface() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', 'stdClass'); - } - - /** - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\Docblock\Description - * @uses phpDocumentor\Reflection\Docblock\Tags\Return_ - * @uses phpDocumentor\Reflection\Docblock\Tags\BaseTag - */ - public function testReturntagIsMappedCorrectly() - { - $context = new Context(''); - - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory - ->shouldReceive('create') - ->once() - ->with('', $context) - ->andReturn(new Description('')) - ; - - $typeResolver = new TypeResolver(); - - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class)); - $tagFactory->addService($descriptionFactory, DescriptionFactory::class); - $tagFactory->addService($typeResolver, TypeResolver::class); - - - /** @var Return_ $tag */ - $tag = $tagFactory->create('@return mixed', $context); - - $this->assertInstanceOf(Return_::class, $tag); - $this->assertSame('return', $tag->getName()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/AuthorTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/AuthorTest.php deleted file mode 100644 index a54954f8..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/AuthorTest.php +++ /dev/null @@ -1,148 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Author - * @covers :: - */ -class AuthorTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Author('Mike van Riel', 'mike@phpdoc.org'); - - $this->assertSame('author', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Author('Mike van Riel', 'mike@phpdoc.org'); - - $this->assertSame('@author Mike van Riel', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Author('Mike van Riel', 'mike@phpdoc.org'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getAuthorName - */ - public function testHasTheAuthorName() - { - $expected = 'Mike van Riel'; - - $fixture = new Author($expected, 'mike@phpdoc.org'); - - $this->assertSame($expected, $fixture->getAuthorName()); - } - - /** - * @covers ::__construct - * @covers ::getAuthorName - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfAuthorNameIsNotAString() - { - new Author([], 'mike@phpdoc.org'); - } - - /** - * @covers ::__construct - * @covers ::getEmail - */ - public function testHasTheAuthorMailAddress() - { - $expected = 'mike@phpdoc.org'; - - $fixture = new Author('Mike van Riel', $expected); - - $this->assertSame($expected, $fixture->getEmail()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfEmailIsNotAString() - { - new Author('Mike van Riel', []); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfEmailIsNotValid() - { - new Author('Mike van Riel', 'mike'); - } - - /** - * @covers ::__construct - * @covers ::__toString - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Author('Mike van Riel', 'mike@phpdoc.org'); - - $this->assertSame('Mike van Riel', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author:: - */ - public function testFactoryMethod() - { - $fixture = Author::create('Mike van Riel '); - - $this->assertSame('Mike van Riel', (string)$fixture); - $this->assertSame('Mike van Riel', $fixture->getAuthorName()); - $this->assertSame('mike@phpdoc.org', $fixture->getEmail()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author:: - */ - public function testFactoryMethodReturnsNullIfItCouldNotReadBody() - { - $this->assertNull(Author::create('dfgr<')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/CoversTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/CoversTest.php deleted file mode 100644 index a2b5e4b3..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/CoversTest.php +++ /dev/null @@ -1,155 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\FqsenResolver; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Covers - * @covers :: - */ -class CoversTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Covers(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('covers', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Covers(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('@covers \DateTime Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Covers(new Fqsen('\DateTime'), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getReference - */ - public function testHasReferenceToFqsen() - { - $expected = new Fqsen('\DateTime'); - - $fixture = new Covers($expected); - - $this->assertSame($expected, $fixture->getReference()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Covers(new Fqsen('\DateTime'), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Covers(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('\DateTime Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\FqsenResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = m::mock(FqsenResolver::class); - $context = new Context(''); - - $fqsen = new Fqsen('\DateTime'); - $description = new Description('My Description'); - - $descriptionFactory - ->shouldReceive('create')->with('My Description', $context)->andReturn($description); - $resolver->shouldReceive('resolve')->with('DateTime', $context)->andReturn($fqsen); - - $fixture = Covers::create('DateTime My Description', $descriptionFactory, $resolver, $context); - - $this->assertSame('\DateTime My Description', (string)$fixture); - $this->assertSame($fqsen, $fixture->getReference()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(Covers::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(Covers::create('')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/DeprecatedTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/DeprecatedTest.php deleted file mode 100644 index 8be9ad7e..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/DeprecatedTest.php +++ /dev/null @@ -1,166 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Deprecated - * @covers :: - */ -class DeprecatedTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Deprecated('1.0', new Description('Description')); - - $this->assertSame('deprecated', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Deprecated('1.0', new Description('Description')); - - $this->assertSame('@deprecated 1.0 Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Deprecated('1.0', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVersion - */ - public function testHasVersionNumber() - { - $expected = '1.0'; - - $fixture = new Deprecated($expected); - - $this->assertSame($expected, $fixture->getVersion()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Deprecated('1.0', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Deprecated('1.0', new Description('Description')); - - $this->assertSame('1.0 Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $version = '1.0'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Deprecated::create('1.0 My Description', $descriptionFactory, $context); - - $this->assertSame('1.0 My Description', (string)$fixture); - $this->assertSame($version, $fixture->getVersion()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethodCreatesEmptyDeprecatedTag() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->never(); - - $fixture = Deprecated::create('', $descriptionFactory, new Context('')); - - $this->assertSame('', (string)$fixture); - $this->assertSame(null, $fixture->getVersion()); - $this->assertSame(null, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfVersionIsNotString() - { - $this->assertNull(Deprecated::create([])); - } - - /** - * @covers ::create - */ - public function testFactoryMethodReturnsNullIfBodyDoesNotMatchRegex() - { - $this->assertEquals(new Deprecated(), Deprecated::create('dkhf<')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/Formatter/PassthroughFormatterTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/Formatter/PassthroughFormatterTest.php deleted file mode 100644 index 045a197f..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/Formatter/PassthroughFormatterTest.php +++ /dev/null @@ -1,41 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags\Formatter; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\Tags\Generic; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - */ -class PassthroughFormatterTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::format - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testFormatterCallsToStringAndReturnsAStandardRepresentation() - { - $expected = '@unknown-tag This is a description'; - - $fixture = new PassthroughFormatter(); - - $this->assertSame( - $expected, - $fixture->format(new Generic('unknown-tag', new Description('This is a description'))) - ); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/GenericTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/GenericTest.php deleted file mode 100644 index 02fa5300..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/GenericTest.php +++ /dev/null @@ -1,146 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @generic http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Generic - * @covers :: - */ -class GenericTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Generic('generic', new Description('Description')); - - $this->assertSame('generic', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Generic('generic', new Description('Description')); - - $this->assertSame('@generic Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Generic('generic', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Generic('generic', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Generic('generic', new Description('Description')); - - $this->assertSame('Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $generics = 'generic'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Generic::create('My Description', 'generic', $descriptionFactory, $context); - - $this->assertSame('My Description', (string)$fixture); - $this->assertSame($generics, $fixture->getName()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfNameIsNotString() - { - Generic::create('', []); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfNameIsNotEmpty() - { - Generic::create('', ''); - } - - /** - * @covers ::create - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfNameContainsIllegalCharacters() - { - Generic::create('', 'name/myname'); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/LinkTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/LinkTest.php deleted file mode 100644 index 9940aec7..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/LinkTest.php +++ /dev/null @@ -1,158 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Link - * @covers :: - */ -class LinkTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Link('http://this.is.my/link', new Description('Description')); - - $this->assertSame('link', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Link('http://this.is.my/link', new Description('Description')); - - $this->assertSame('@link http://this.is.my/link Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Link('http://this.is.my/link', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getLink - */ - public function testHasLinkUrl() - { - $expected = 'http://this.is.my/link'; - - $fixture = new Link($expected); - - $this->assertSame($expected, $fixture->getLink()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Link('http://this.is.my/link', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Link('http://this.is.my/link', new Description('Description')); - - $this->assertSame('http://this.is.my/link Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $links = 'http://this.is.my/link'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Link::create('http://this.is.my/link My Description', $descriptionFactory, $context); - - $this->assertSame('http://this.is.my/link My Description', (string)$fixture); - $this->assertSame($links, $fixture->getLink()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethodCreatesEmptyLinkTag() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->never(); - - $fixture = Link::create('', $descriptionFactory, new Context('')); - - $this->assertSame('', (string)$fixture); - $this->assertSame('', $fixture->getLink()); - $this->assertSame(null, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfVersionIsNotString() - { - $this->assertNull(Link::create([])); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/MethodTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/MethodTest.php deleted file mode 100644 index 5d6e981e..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/MethodTest.php +++ /dev/null @@ -1,437 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Array_; -use phpDocumentor\Reflection\Types\Compound; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\Integer; -use phpDocumentor\Reflection\Types\Object_; -use phpDocumentor\Reflection\Types\String_; -use phpDocumentor\Reflection\Types\Void_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Method - * @covers :: - */ -class MethodTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Method('myMethod'); - - $this->assertSame('method', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::isStatic - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $arguments = [ - ['name' => 'argument1', 'type' => new String_()], - ['name' => 'argument2', 'type' => new Object_()] - ]; - $fixture = new Method('myMethod', $arguments, new Void_(), true, new Description('My Description')); - - $this->assertSame( - '@method static void myMethod(string $argument1, object $argument2) My Description', - $fixture->render() - ); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Method('myMethod'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getMethodName - */ - public function testHasMethodName() - { - $expected = 'myMethod'; - - $fixture = new Method($expected); - - $this->assertSame($expected, $fixture->getMethodName()); - } - - /** - * @covers ::__construct - * @covers ::getArguments - */ - public function testHasArguments() - { - $arguments = [ - [ 'name' => 'argument1', 'type' => new String_() ] - ]; - - $fixture = new Method('myMethod', $arguments); - - $this->assertSame($arguments, $fixture->getArguments()); - } - - /** - * @covers ::__construct - * @covers ::getArguments - */ - public function testArgumentsMayBePassedAsString() - { - $arguments = ['argument1']; - $expected = [ - [ 'name' => $arguments[0], 'type' => new Void_() ] - ]; - - $fixture = new Method('myMethod', $arguments); - - $this->assertEquals($expected, $fixture->getArguments()); - } - - /** - * @covers ::__construct - * @covers ::getArguments - */ - public function testArgumentTypeCanBeInferredAsVoid() - { - $arguments = [ [ 'name' => 'argument1' ] ]; - $expected = [ - [ 'name' => $arguments[0]['name'], 'type' => new Void_() ] - ]; - - $fixture = new Method('myMethod', $arguments); - - $this->assertEquals($expected, $fixture->getArguments()); - } - - /** - * @covers ::create - */ - public function testRestArgumentIsParsedAsRegularArg() - { - $expected = [ - [ 'name' => 'arg1', 'type' => new Void_() ], - [ 'name' => 'rest', 'type' => new Void_() ], - [ 'name' => 'rest2', 'type' => new Array_() ], - ]; - - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - $description = new Description(''); - $descriptionFactory->shouldReceive('create')->with('', $context)->andReturn($description); - - $fixture = Method::create( - 'void myMethod($arg1, ...$rest, array ... $rest2)', - $resolver, - $descriptionFactory, - $context - ); - - $this->assertEquals($expected, $fixture->getArguments()); - } - - /** - * @covers ::__construct - * @covers ::getReturnType - */ - public function testHasReturnType() - { - $expected = new String_(); - - $fixture = new Method('myMethod', [], $expected); - - $this->assertSame($expected, $fixture->getReturnType()); - } - - /** - * @covers ::__construct - * @covers ::getReturnType - */ - public function testReturnTypeCanBeInferredAsVoid() - { - $fixture = new Method('myMethod', []); - - $this->assertEquals(new Void_(), $fixture->getReturnType()); - } - - /** - * @covers ::__construct - * @covers ::isStatic - */ - public function testMethodCanBeStatic() - { - $expected = false; - $fixture = new Method('myMethod', [], null, $expected); - $this->assertSame($expected, $fixture->isStatic()); - - $expected = true; - $fixture = new Method('myMethod', [], null, $expected); - $this->assertSame($expected, $fixture->isStatic()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Method('myMethod', [], null, false, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::isStatic - */ - public function testStringRepresentationIsReturned() - { - $arguments = [ - ['name' => 'argument1', 'type' => new String_()], - ['name' => 'argument2', 'type' => new Object_()] - ]; - $fixture = new Method('myMethod', $arguments, new Void_(), true, new Description('My Description')); - - $this->assertSame( - 'static void myMethod(string $argument1, object $argument2) My Description', - (string)$fixture - ); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - - $description = new Description('My Description'); - $expectedArguments = [ - [ 'name' => 'argument1', 'type' => new String_() ], - [ 'name' => 'argument2', 'type' => new Void_() ] - ]; - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Method::create( - 'static void myMethod(string $argument1, $argument2) My Description', - $resolver, - $descriptionFactory, - $context - ); - - $this->assertSame('static void myMethod(string $argument1, void $argument2) My Description', (string)$fixture); - $this->assertSame('myMethod', $fixture->getMethodName()); - $this->assertEquals($expectedArguments, $fixture->getArguments()); - $this->assertInstanceOf(Void_::class, $fixture->getReturnType()); - $this->assertSame($description, $fixture->getDescription()); - } - - public function collectionReturnTypesProvider() - { - return [ - ['int[]', Array_::class, Integer::class, Compound::class], - ['int[][]', Array_::class, Array_::class, Compound::class], - ['Object[]', Array_::class, Object_::class, Compound::class], - ['array[]', Array_::class, Array_::class, Compound::class], - ]; - } - - /** - * @dataProvider collectionReturnTypesProvider - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method:: - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\Types\Array_ - * @uses \phpDocumentor\Reflection\Types\Compound - * @uses \phpDocumentor\Reflection\Types\Integer - * @uses \phpDocumentor\Reflection\Types\Object_ - * @param string $returnType - * @param string $expectedType - * @param string $expectedValueType - * @param string null $expectedKeyType - */ - public function testCollectionReturnTypes( - $returnType, - $expectedType, - $expectedValueType = null, - $expectedKeyType = null - ) { $resolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->with('', null)->andReturn(new Description('')); - - $fixture = Method::create("$returnType myMethod(\$arg)", $resolver, $descriptionFactory); - $returnType = $fixture->getReturnType(); - $this->assertInstanceOf($expectedType, $returnType); - - if ($returnType instanceof Array_) { - $this->assertInstanceOf($expectedValueType, $returnType->getValueType()); - $this->assertInstanceOf($expectedKeyType, $returnType->getKeyType()); - } - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Method::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsEmpty() - { - Method::create(''); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodReturnsNullIfBodyIsIncorrect() - { - $this->assertNull(Method::create('body(')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Method::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Method::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testCreationFailsIfBodyIsNotString() - { - new Method([]); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testCreationFailsIfBodyIsEmpty() - { - new Method(''); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testCreationFailsIfStaticIsNotBoolean() - { - new Method('body', [], null, []); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testCreationFailsIfArgumentRecordContainsInvalidEntry() - { - new Method('body', [ [ 'name' => 'myName', 'unknown' => 'nah' ] ]); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testCreateMethodParenthesisMissing() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Method::create( - 'static void myMethod My Description', - $resolver, - $descriptionFactory, - $context - ); - - $this->assertSame('static void myMethod() My Description', (string)$fixture); - $this->assertSame('myMethod', $fixture->getMethodName()); - $this->assertEquals([], $fixture->getArguments()); - $this->assertInstanceOf(Void_::class, $fixture->getReturnType()); - $this->assertSame($description, $fixture->getDescription()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ParamTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ParamTest.php deleted file mode 100644 index 0c718ab7..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ParamTest.php +++ /dev/null @@ -1,228 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Param - * @covers :: - */ -class ParamTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Param('myParameter', null, false, new Description('Description')); - - $this->assertSame('param', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::isVariadic - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Param('myParameter', new String_(), true, new Description('Description')); - $this->assertSame('@param string ...$myParameter Description', $fixture->render()); - - $fixture = new Param('myParameter', new String_(), false, new Description('Description')); - $this->assertSame('@param string $myParameter Description', $fixture->render()); - - $fixture = new Param('myParameter', null, false, new Description('Description')); - $this->assertSame('@param $myParameter Description', $fixture->render()); - - $fixture = new Param('myParameter'); - $this->assertSame('@param $myParameter', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Param('myParameter'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myParameter'; - - $fixture = new Param($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Param('myParameter', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers ::isVariadic - */ - public function testIfParameterIsVariadic() - { - $fixture = new Param('myParameter', new String_(), false); - $this->assertFalse($fixture->isVariadic()); - - $fixture = new Param('myParameter', new String_(), true); - $this->assertTrue($fixture->isVariadic()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Param('1.0', null, false, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::isVariadic - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Param('myParameter', new String_(), true, new Description('Description')); - - $this->assertSame('string ...$myParameter Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Param::create('string ...$myParameter My Description', $typeResolver, $descriptionFactory, $context); - - $this->assertSame('string ...$myParameter My Description', (string)$fixture); - $this->assertSame('myParameter', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertTrue($fixture->isVariadic()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - Param::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Param::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Param::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Param::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new Param([]); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariadicIsNotBoolean() - { - new Param('', null, []); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyReadTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyReadTest.php deleted file mode 100644 index c3fb7700..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyReadTest.php +++ /dev/null @@ -1,201 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead - * @covers :: - */ -class PropertyReadTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new PropertyRead('myProperty', null, new Description('Description')); - - $this->assertSame('property-read', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new PropertyRead('myProperty', new String_(), new Description('Description')); - $this->assertSame('@property-read string $myProperty Description', $fixture->render()); - - $fixture = new PropertyRead('myProperty', null, new Description('Description')); - $this->assertSame('@property-read $myProperty Description', $fixture->render()); - - $fixture = new PropertyRead('myProperty'); - $this->assertSame('@property-read $myProperty', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new PropertyRead('myProperty'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myProperty'; - - $fixture = new PropertyRead($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new PropertyRead('myProperty', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new PropertyRead('1.0', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new PropertyRead('myProperty', new String_(), new Description('Description')); - - $this->assertSame('string $myProperty Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = PropertyRead::create('string $myProperty My Description', $typeResolver, $descriptionFactory, - $context); - - $this->assertSame('string $myProperty My Description', (string)$fixture); - $this->assertSame('myProperty', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - PropertyRead::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - PropertyRead::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - PropertyRead::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - PropertyRead::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new PropertyRead([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyTest.php deleted file mode 100644 index 908dfb28..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyTest.php +++ /dev/null @@ -1,200 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Property - * @covers :: - */ -class PropertyTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Property('myProperty', null, new Description('Description')); - - $this->assertSame('property', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Property('myProperty', new String_(), new Description('Description')); - $this->assertSame('@property string $myProperty Description', $fixture->render()); - - $fixture = new Property('myProperty', null, new Description('Description')); - $this->assertSame('@property $myProperty Description', $fixture->render()); - - $fixture = new Property('myProperty'); - $this->assertSame('@property $myProperty', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Property('myProperty'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myProperty'; - - $fixture = new Property($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Property('myProperty', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Property('1.0', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Property('myProperty', new String_(), new Description('Description')); - - $this->assertSame('string $myProperty Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Property::create('string $myProperty My Description', $typeResolver, $descriptionFactory, $context); - - $this->assertSame('string $myProperty My Description', (string)$fixture); - $this->assertSame('myProperty', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - Property::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Property::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Property::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Property::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new Property([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyWriteTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyWriteTest.php deleted file mode 100644 index 5ea6524c..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyWriteTest.php +++ /dev/null @@ -1,201 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite - * @covers :: - */ -class PropertyWriteTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new PropertyWrite('myProperty', null, new Description('Description')); - - $this->assertSame('property-write', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new PropertyWrite('myProperty', new String_(), new Description('Description')); - $this->assertSame('@property-write string $myProperty Description', $fixture->render()); - - $fixture = new PropertyWrite('myProperty', null, new Description('Description')); - $this->assertSame('@property-write $myProperty Description', $fixture->render()); - - $fixture = new PropertyWrite('myProperty'); - $this->assertSame('@property-write $myProperty', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new PropertyWrite('myProperty'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myProperty'; - - $fixture = new PropertyWrite($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new PropertyWrite('myProperty', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new PropertyWrite('1.0', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new PropertyWrite('myProperty', new String_(), new Description('Description')); - - $this->assertSame('string $myProperty Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = PropertyWrite::create('string $myProperty My Description', $typeResolver, $descriptionFactory, - $context); - - $this->assertSame('string $myProperty My Description', (string)$fixture); - $this->assertSame('myProperty', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - PropertyWrite::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - PropertyWrite::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - PropertyWrite::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - PropertyWrite::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new PropertyWrite([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ReturnTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ReturnTest.php deleted file mode 100644 index 2bc54391..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ReturnTest.php +++ /dev/null @@ -1,170 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Return_ - * @covers :: - */ -class ReturnTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Return_(new String_(), new Description('Description')); - - $this->assertSame('return', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Return_(new String_(), new Description('Description')); - - $this->assertSame('@return string Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Return_(new String_(), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Return_($expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Return_(new String_(), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Return_(new String_(), new Description('Description')); - - $this->assertSame('string Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - - $type = new String_(); - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Return_::create('string My Description', $resolver, $descriptionFactory, $context); - - $this->assertSame('string My Description', (string)$fixture); - $this->assertEquals($type, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(Return_::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(Return_::create('')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Return_::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Return_::create('body', new TypeResolver()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SeeTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SeeTest.php deleted file mode 100644 index 8d3e3e8c..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SeeTest.php +++ /dev/null @@ -1,173 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\FqsenResolver; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\See - * @covers :: - */ -class SeeTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new See(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('see', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new See(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('@see \DateTime Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new See(new Fqsen('\DateTime'), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getReference - */ - public function testHasReferenceToFqsen() - { - $expected = new Fqsen('\DateTime'); - - $fixture = new See($expected); - - $this->assertSame($expected, $fixture->getReference()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new See(new Fqsen('\DateTime'), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new See(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('\DateTime Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\FqsenResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = m::mock(FqsenResolver::class); - $context = new Context(''); - - $fqsen = new Fqsen('\DateTime'); - $description = new Description('My Description'); - - $descriptionFactory - ->shouldReceive('create')->with('My Description', $context)->andReturn($description); - $resolver->shouldReceive('resolve')->with('DateTime', $context)->andReturn($fqsen); - - $fixture = See::create('DateTime My Description', $resolver, $descriptionFactory, $context); - - $this->assertSame('\DateTime My Description', (string)$fixture); - $this->assertSame($fqsen, $fixture->getReference()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(See::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(See::create('')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - See::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - See::create('body', new FqsenResolver()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SinceTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SinceTest.php deleted file mode 100644 index 3f42db5d..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SinceTest.php +++ /dev/null @@ -1,166 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Since - * @covers :: - */ -class SinceTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Since('1.0', new Description('Description')); - - $this->assertSame('since', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Since('1.0', new Description('Description')); - - $this->assertSame('@since 1.0 Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Since('1.0', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVersion - */ - public function testHasVersionNumber() - { - $expected = '1.0'; - - $fixture = new Since($expected); - - $this->assertSame($expected, $fixture->getVersion()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Since('1.0', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Since('1.0', new Description('Description')); - - $this->assertSame('1.0 Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $version = '1.0'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Since::create('1.0 My Description', $descriptionFactory, $context); - - $this->assertSame('1.0 My Description', (string)$fixture); - $this->assertSame($version, $fixture->getVersion()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethodCreatesEmptySinceTag() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->never(); - - $fixture = Since::create('', $descriptionFactory, new Context('')); - - $this->assertSame('', (string)$fixture); - $this->assertSame(null, $fixture->getVersion()); - $this->assertSame(null, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfSinceIsNotString() - { - $this->assertNull(Since::create([])); - } - - /** - * @covers ::create - */ - public function testFactoryMethodReturnsNullIfBodyDoesNotMatchRegex() - { - $this->assertNull(Since::create('dkhf<')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SourceTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SourceTest.php deleted file mode 100644 index cbf01f65..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SourceTest.php +++ /dev/null @@ -1,199 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Source - * @covers :: - */ -class SourceTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Source(1, null, new Description('Description')); - - $this->assertSame('source', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Source(1, 10, new Description('Description')); - $this->assertSame('@source 1 10 Description', $fixture->render()); - - $fixture = new Source(1, null, new Description('Description')); - $this->assertSame('@source 1 Description', $fixture->render()); - - $fixture = new Source(1); - $this->assertSame('@source 1', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Source(1); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getStartingLine - */ - public function testHasStartingLine() - { - $expected = 1; - - $fixture = new Source($expected); - - $this->assertSame($expected, $fixture->getStartingLine()); - } - - /** - * @covers ::__construct - * @covers ::getLineCount - */ - public function testHasLineCount() - { - $expected = 2; - - $fixture = new Source(1, $expected); - - $this->assertSame($expected, $fixture->getLineCount()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Source('1', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Source(1, 10, new Description('Description')); - - $this->assertSame('1 10 Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Source::create('1 10 My Description', $descriptionFactory, $context); - - $this->assertSame('1 10 My Description', (string)$fixture); - $this->assertSame(1, $fixture->getStartingLine()); - $this->assertSame(10, $fixture->getLineCount()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - Source::create('', $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Source::create([]); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Source::create('1'); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfStartingLineIsNotInteger() - { - new Source('blabla'); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfLineCountIsNotIntegerOrNull() - { - new Source('1', []); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ThrowsTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ThrowsTest.php deleted file mode 100644 index 657d6ca5..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ThrowsTest.php +++ /dev/null @@ -1,170 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Throws - * @covers :: - */ -class ThrowsTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Throws(new String_(), new Description('Description')); - - $this->assertSame('throws', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Throws(new String_(), new Description('Description')); - - $this->assertSame('@throws string Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Throws(new String_(), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Throws($expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Throws(new String_(), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Throws(new String_(), new Description('Description')); - - $this->assertSame('string Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - - $type = new String_(); - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Throws::create('string My Description', $resolver, $descriptionFactory, $context); - - $this->assertSame('string My Description', (string)$fixture); - $this->assertEquals($type, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(Throws::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(Throws::create('')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Throws::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Throws::create('body', new TypeResolver()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/UsesTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/UsesTest.php deleted file mode 100644 index 419f7e36..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/UsesTest.php +++ /dev/null @@ -1,174 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\FqsenResolver; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Uses - * @covers :: - */ -class UsesTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Uses(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('uses', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Uses(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('@uses \DateTime Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Uses(new Fqsen('\DateTime'), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getReference - */ - public function testHasReferenceToFqsen() - { - $expected = new Fqsen('\DateTime'); - - $fixture = new Uses($expected); - - $this->assertSame($expected, $fixture->getReference()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Uses(new Fqsen('\DateTime'), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Uses(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('\DateTime Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\FqsenResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = m::mock(FqsenResolver::class); - $context = new Context(''); - - $fqsen = new Fqsen('\DateTime'); - $description = new Description('My Description'); - - $descriptionFactory - ->shouldReceive('create')->with('My Description', $context)->andReturn($description) - ; - $resolver->shouldReceive('resolve')->with('DateTime', $context)->andReturn($fqsen); - - $fixture = Uses::create('DateTime My Description', $resolver, $descriptionFactory, $context); - - $this->assertSame('\DateTime My Description', (string)$fixture); - $this->assertSame($fqsen, $fixture->getReference()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(Uses::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(Uses::create('')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Uses::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Uses::create('body', new FqsenResolver()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VarTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VarTest.php deleted file mode 100644 index 34f290ad..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VarTest.php +++ /dev/null @@ -1,200 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Var_ - * @covers :: - */ -class VarTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Var_('myVariable', null, new Description('Description')); - - $this->assertSame('var', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Var_('myVariable', new String_(), new Description('Description')); - $this->assertSame('@var string $myVariable Description', $fixture->render()); - - $fixture = new Var_('myVariable', null, new Description('Description')); - $this->assertSame('@var $myVariable Description', $fixture->render()); - - $fixture = new Var_('myVariable'); - $this->assertSame('@var $myVariable', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Var_('myVariable'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myVariable'; - - $fixture = new Var_($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Var_('myVariable', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Var_('1.0', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Var_('myVariable', new String_(), new Description('Description')); - - $this->assertSame('string $myVariable Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Var_::create('string $myVariable My Description', $typeResolver, $descriptionFactory, $context); - - $this->assertSame('string $myVariable My Description', (string)$fixture); - $this->assertSame('myVariable', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - Var_::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Var_::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Var_::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Var_::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new Var_([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VersionTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VersionTest.php deleted file mode 100644 index 5c487fd3..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VersionTest.php +++ /dev/null @@ -1,166 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Version - * @covers :: - */ -class VersionTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Version('1.0', new Description('Description')); - - $this->assertSame('version', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Version('1.0', new Description('Description')); - - $this->assertSame('@version 1.0 Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Version('1.0', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVersion - */ - public function testHasVersionNumber() - { - $expected = '1.0'; - - $fixture = new Version($expected); - - $this->assertSame($expected, $fixture->getVersion()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Version('1.0', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Version('1.0', new Description('Description')); - - $this->assertSame('1.0 Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $version = '1.0'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Version::create('1.0 My Description', $descriptionFactory, $context); - - $this->assertSame('1.0 My Description', (string)$fixture); - $this->assertSame($version, $fixture->getVersion()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethodCreatesEmptyVersionTag() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->never(); - - $fixture = Version::create('', $descriptionFactory, new Context('')); - - $this->assertSame('', (string)$fixture); - $this->assertSame(null, $fixture->getVersion()); - $this->assertSame(null, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfVersionIsNotString() - { - $this->assertNull(Version::create([])); - } - - /** - * @covers ::create - */ - public function testFactoryMethodReturnsNullIfBodyDoesNotMatchRegex() - { - $this->assertNull(Version::create('dkhf<')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockFactoryTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockFactoryTest.php deleted file mode 100644 index f1261b65..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockFactoryTest.php +++ /dev/null @@ -1,290 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\TagFactory; -use phpDocumentor\Reflection\DocBlock\Tags\Param; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass phpDocumentor\Reflection\DocBlockFactory - * @covers :: - * @uses \Webmozart\Assert\Assert - * @uses phpDocumentor\Reflection\DocBlock - */ -class DocBlockFactoryTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::createInstance - * @uses \phpDocumentor\Reflection\DocBlock\StandardTagFactory - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - */ - public function testCreateFactoryUsingFactoryMethod() - { - $fixture = DocBlockFactory::createInstance(); - - $this->assertInstanceOf(DocBlockFactory::class, $fixture); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testCreateDocBlockFromReflection() - { - $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), m::mock(TagFactory::class)); - - $docBlock = '/** This is a DocBlock */'; - $classReflector = m::mock(\ReflectionClass::class); - $classReflector->shouldReceive('getDocComment')->andReturn($docBlock); - $docblock = $fixture->create($classReflector); - - $this->assertInstanceOf(DocBlock::class, $docblock); - $this->assertSame('This is a DocBlock', $docblock->getSummary()); - $this->assertEquals(new Description(''), $docblock->getDescription()); - $this->assertSame([], $docblock->getTags()); - $this->assertEquals(new Context(''), $docblock->getContext()); - $this->assertNull($docblock->getLocation()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testCreateDocBlockFromStringWithDocComment() - { - $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), m::mock(TagFactory::class)); - - $docblock = $fixture->create('/** This is a DocBlock */'); - - $this->assertInstanceOf(DocBlock::class, $docblock); - $this->assertSame('This is a DocBlock', $docblock->getSummary()); - $this->assertEquals(new Description(''), $docblock->getDescription()); - $this->assertSame([], $docblock->getTags()); - $this->assertEquals(new Context(''), $docblock->getContext()); - $this->assertNull($docblock->getLocation()); - } - - /** - * @covers ::create - * @covers ::__construct - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testCreateDocBlockFromStringWithoutDocComment() - { - $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), m::mock(TagFactory::class)); - - $docblock = $fixture->create('This is a DocBlock'); - - $this->assertInstanceOf(DocBlock::class, $docblock); - $this->assertSame('This is a DocBlock', $docblock->getSummary()); - $this->assertEquals(new Description(''), $docblock->getDescription()); - $this->assertSame([], $docblock->getTags()); - $this->assertEquals(new Context(''), $docblock->getContext()); - $this->assertNull($docblock->getLocation()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses phpDocumentor\Reflection\DocBlock\Description - * @dataProvider provideSummaryAndDescriptions - */ - public function testSummaryAndDescriptionAreSeparated($given, $summary, $description) - { - $tagFactory = m::mock(TagFactory::class); - $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory); - - $docblock = $fixture->create($given); - - $this->assertSame($summary, $docblock->getSummary()); - $this->assertEquals(new Description($description), $docblock->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testDescriptionsRetainFormatting() - { - $tagFactory = m::mock(TagFactory::class); - $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory); - - $given = <<create($given); - - $this->assertEquals(new Description($description), $docblock->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testTagsAreInterpretedUsingFactory() - { - $tagString = << This is with - multiline description. -TAG; - - $tag = m::mock(Tag::class); - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create')->with($tagString, m::type(Context::class))->andReturn($tag); - - $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory); - - $given = << This is with - * multiline description. - */ -DOCBLOCK; - - $docblock = $fixture->create($given, new Context('')); - - $this->assertEquals([$tag], $docblock->getTags()); - } - - public function provideSummaryAndDescriptions() - { - return [ - ['This is a DocBlock', 'This is a DocBlock', ''], - [ - 'This is a DocBlock. This should still be summary.', - 'This is a DocBlock. This should still be summary.', - '' - ], - [ - <<shouldReceive('create')->with(m::any(), $context)->andReturn(new Param('param')); - $docblock = $fixture->create('/** @param MyType $param */', $context); - } - - /** - * @covers ::__construct - * @covers ::create - * - * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testTagsAreFilteredForNullValues() - { - $tagString = << This is with - multiline description. -TAG; - - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create')->with($tagString, m::any())->andReturn(null); - - $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory); - - $given = << This is with - * multiline description. - */ -DOCBLOCK; - - $docblock = $fixture->create($given, new Context('')); - - $this->assertEquals([], $docblock->getTags()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockTest.php deleted file mode 100644 index 4a8d4ded..00000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockTest.php +++ /dev/null @@ -1,252 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use Mockery as m; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass phpDocumentor\Reflection\DocBlock - * @covers :: - * @uses \Webmozart\Assert\Assert - */ -class DocBlockTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::getSummary - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testDocBlockCanHaveASummary() - { - $summary = 'This is a summary'; - - $fixture = new DocBlock($summary); - - $this->assertSame($summary, $fixture->getSummary()); - } - - /** - * @covers ::__construct - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfSummaryIsNotAString() - { - new DocBlock([]); - } - - /** - * @covers ::__construct - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfTemplateStartIsNotABoolean() - { - new DocBlock('', null, [], null, null, ['is not boolean']); - } - - /** - * @covers ::__construct - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfTemplateEndIsNotABoolean() - { - new DocBlock('', null, [], null, null, false, ['is not boolean']); - } - - /** - * @covers ::__construct - * @covers ::getDescription - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testDocBlockCanHaveADescription() - { - $description = new DocBlock\Description(''); - - $fixture = new DocBlock('', $description); - - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::getTags - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tag - */ - public function testDocBlockCanHaveTags() - { - $tags = [ - m::mock(DocBlock\Tag::class) - ]; - - $fixture = new DocBlock('', null, $tags); - - $this->assertSame($tags, $fixture->getTags()); - } - - /** - * @covers ::__construct - * @covers ::getTags - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tag - * - * @expectedException \InvalidArgumentException - */ - public function testDocBlockAllowsOnlyTags() - { - $tags = [ - null - ]; - - $fixture = new DocBlock('', null, $tags); - } - - /** - * @covers ::__construct - * @covers ::getTagsByName - * - * @uses \phpDocumentor\Reflection\DocBlock::getTags - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tag - */ - public function testFindTagsInDocBlockByName() - { - $tag1 = m::mock(DocBlock\Tag::class); - $tag2 = m::mock(DocBlock\Tag::class); - $tag3 = m::mock(DocBlock\Tag::class); - $tags = [$tag1, $tag2, $tag3]; - - $tag1->shouldReceive('getName')->andReturn('abc'); - $tag2->shouldReceive('getName')->andReturn('abcd'); - $tag3->shouldReceive('getName')->andReturn('ab'); - - $fixture = new DocBlock('', null, $tags); - - $this->assertSame([$tag2], $fixture->getTagsByName('abcd')); - $this->assertSame([], $fixture->getTagsByName('Ebcd')); - } - - /** - * @covers ::__construct - * @covers ::getTagsByName - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfNameForTagsIsNotString() - { - $fixture = new DocBlock(); - $fixture->getTagsByName([]); - } - - /** - * @covers ::__construct - * @covers ::hasTag - * - * @uses \phpDocumentor\Reflection\DocBlock::getTags - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tag - */ - public function testCheckIfThereAreTagsWithAGivenName() - { - $tag1 = m::mock(DocBlock\Tag::class); - $tag2 = m::mock(DocBlock\Tag::class); - $tag3 = m::mock(DocBlock\Tag::class); - $tags = [$tag1, $tag2, $tag3]; - - $tag1->shouldReceive('getName')->twice()->andReturn('abc'); - $tag2->shouldReceive('getName')->twice()->andReturn('abcd'); - $tag3->shouldReceive('getName')->once(); - - $fixture = new DocBlock('', null, $tags); - - $this->assertTrue($fixture->hasTag('abcd')); - $this->assertFalse($fixture->hasTag('Ebcd')); - } - - /** - * @covers ::__construct - * @covers ::hasTag - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfNameForCheckingTagsIsNotString() - { - $fixture = new DocBlock(); - $fixture->hasTag([]); - } - - /** - * @covers ::__construct - * @covers ::getContext - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testDocBlockKnowsInWhichNamespaceItIsAndWhichAliasesThereAre() - { - $context = new Context(''); - - $fixture = new DocBlock('', null, [], $context); - - $this->assertSame($context, $fixture->getContext()); - } - - /** - * @covers ::__construct - * @covers ::getLocation - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Location - */ - public function testDocBlockKnowsAtWhichLineItIs() - { - $location = new Location(10); - - $fixture = new DocBlock('', null, [], null, $location); - - $this->assertSame($location, $fixture->getLocation()); - } - - /** - * @covers ::__construct - * @covers ::isTemplateStart - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testDocBlockKnowsIfItIsTheStartOfADocBlockTemplate() - { - $fixture = new DocBlock('', null, [], null, null, true); - - $this->assertTrue($fixture->isTemplateStart()); - } - - /** - * @covers ::__construct - * @covers ::isTemplateEnd - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testDocBlockKnowsIfItIsTheEndOfADocBlockTemplate() - { - $fixture = new DocBlock('', null, [], null, null, false, true); - - $this->assertTrue($fixture->isTemplateEnd()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/.scrutinizer.yml b/lib/composer/vendor/phpdocumentor/type-resolver/.scrutinizer.yml deleted file mode 100644 index 7d7372a8..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/.scrutinizer.yml +++ /dev/null @@ -1,31 +0,0 @@ -before_commands: - - "composer install --no-dev --prefer-source" - -tools: - external_code_coverage: true - php_code_sniffer: - config: - standard: PSR2 - filter: - paths: ["src/*", "tests/*"] - php_cpd: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_loc: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_mess_detector: - enabled: true - config: - ruleset: phpmd.xml.dist - design_rules: { eval_expression: false } - filter: - paths: ["src/*"] - php_pdepend: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_analyzer: - enabled: true - filter: - paths: ["src/*", "tests/*"] - sensiolabs_security_checker: true diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/README.md b/lib/composer/vendor/phpdocumentor/type-resolver/README.md index ca8147bc..fad34006 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/README.md +++ b/lib/composer/vendor/phpdocumentor/type-resolver/README.md @@ -61,8 +61,10 @@ Where the FqsenResolver can resolve: In order to resolve a type you will have to instantiate the class `\phpDocumentor\Reflection\TypeResolver` and call its `resolve` method like this: - $typeResolver = new \phpDocumentor\Reflection\TypeResolver(); - $type = $typeResolver->resolve('string|integer'); +```php +$typeResolver = new \phpDocumentor\Reflection\TypeResolver(); +$type = $typeResolver->resolve('string|integer'); +``` In this example you will receive a Value Object of class `\phpDocumentor\Reflection\Types\Compound` that has two elements, one of type `\phpDocumentor\Reflection\Types\String_` and one of type @@ -77,8 +79,10 @@ in which namespace the given expression occurs and which namespace aliases (or i A Fully Qualified Structural Element Name is a reference to another element in your code bases and can be resolved using the `\phpDocumentor\Reflection\FqsenResolver` class' `resolve` method, like this: - $fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); - $fqsen = $fqsenResolver->resolve('\phpDocumentor\Reflection\FqsenResolver::resolve()'); +```php +$fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); +$fqsen = $fqsenResolver->resolve('\phpDocumentor\Reflection\FqsenResolver::resolve()'); +``` In this example we resolve a Fully Qualified Structural Element Name (meaning that it includes the full namespace, class name and element name) and receive a Value Object of type `\phpDocumentor\Reflection\Fqsen`. @@ -95,7 +99,6 @@ names. For example, you have this file: ```php - '\phpDocumentor\Reflection\Types'] - ); +```php +$context = new \phpDocumentor\Reflection\Types\Context( + '\My\Example', + [ 'Types' => '\phpDocumentor\Reflection\Types'] +); +``` Or by using the `\phpDocumentor\Reflection\Types\ContextFactory` to instantiate a new context based on a Reflector object or by providing the namespace that you'd like to extract and the source code of the file in which the given type expression occurs. - $contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); - $context = $contextFactory->createFromReflector(new ReflectionMethod('\My\Example\Classy', '__construct')); +```php +$contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); +$context = $contextFactory->createFromReflector(new ReflectionMethod('\My\Example\Classy', '__construct')); +``` or - $contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); - $context = $contextFactory->createForNamespace('\My\Example', file_get_contents('My/Example/Classy.php')); +```php +$contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); +$context = $contextFactory->createForNamespace('\My\Example', file_get_contents('My/Example/Classy.php')); +``` ### Using the Context @@ -145,8 +154,10 @@ class as second argument and the Resolvers will take this into account when reso To obtain the resolved class name for the `@var` tag in the example above you can do: - $typeResolver = new \phpDocumentor\Reflection\TypeResolver(); - $type = $typeResolver->resolve('Types\Context', $context); +```php +$typeResolver = new \phpDocumentor\Reflection\TypeResolver(); +$type = $typeResolver->resolve('Types\Context', $context); +``` When you do this you will receive an object of class `\phpDocumentor\Reflection\Types\Object_` for which you can call the `getFqsen` method to receive a Value Object that represents the complete FQSEN. So that would be @@ -161,8 +172,10 @@ the `getFqsen` method to receive a Value Object that represents the complete FQS Another example is on how to resolve the FQSEN of a method as can be seen with the `@see` tag in the example above. To resolve that you can do the following: - $fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); - $type = $fqsenResolver->resolve('Classy::otherFunction()', $context); +```php +$fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); +$type = $fqsenResolver->resolve('Classy::otherFunction()', $context); +``` Because Classy is a Class in the current namespace its FQSEN will have the `My\Example` namespace and by calling the `resolve` method of the FQSEN Resolver you will receive an `Fqsen` object that refers to diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/composer.json b/lib/composer/vendor/phpdocumentor/type-resolver/composer.json index abaa965d..82ead156 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/composer.json +++ b/lib/composer/vendor/phpdocumentor/type-resolver/composer.json @@ -6,7 +6,7 @@ {"name": "Mike van Riel", "email": "me@mikevanriel.com"} ], "require": { - "php": ">=5.5", + "php": "^5.5 || ^7.0", "phpdocumentor/reflection-common": "^1.0" }, "autoload": { diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php deleted file mode 100644 index 682b1d3d..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php +++ /dev/null @@ -1,13 +0,0 @@ -resolve('string|integer')); - -// Will return the string "string|int" -var_dump((string)$typeResolver->resolve('string|integer')); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php deleted file mode 100644 index 70aa5e42..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php +++ /dev/null @@ -1,12 +0,0 @@ - 'Mockery' ]); -var_dump((string)$typeResolver->resolve('Types\Resolver|m\MockInterface', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php deleted file mode 100644 index 4f4282eb..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php +++ /dev/null @@ -1,17 +0,0 @@ -resolve('Types\Resolver::resolveFqsen()', $context)); - -// Property named: \phpDocumentor\Types\Types\Resolver::$keyWords -var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php deleted file mode 100644 index 957c97dd..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php +++ /dev/null @@ -1,30 +0,0 @@ -createFromReflector(new ReflectionClass('My\\Example\\Classy')); - -// Class named: \phpDocumentor\Reflection\Types\Resolver -var_dump((string)$typeResolver->resolve('Types\Resolver', $context)); - -// String -var_dump((string)$typeResolver->resolve('string', $context)); - -// Property named: \phpDocumentor\Reflection\Types\Resolver::$keyWords -var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); - -// Class named: \My\Example\string -// - Shows the difference between the FqsenResolver and TypeResolver; the FqsenResolver will assume -// that the given value is not a type but most definitely a reference to another element. This is -// because conflicts between type keywords and class names can exist and if you know a reference -// is not a type but an element you can force that keywords are resolved. -var_dump((string)$fqsenResolver->resolve('string', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php deleted file mode 100644 index 10c0c883..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php +++ /dev/null @@ -1,30 +0,0 @@ -createFromReflector(new ReflectionMethod('My\\Example\\Classy', '__construct')); - -// Class named: \phpDocumentor\Reflection\Types\Resolver -var_dump((string)$typeResolver->resolve('Types\Resolver', $context)); - -// String -var_dump((string)$typeResolver->resolve('string', $context)); - -// Property named: \phpDocumentor\Reflection\Types\Resolver::$keyWords -var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); - -// Class named: \My\Example\string -// - Shows the difference between the FqsenResolver and TypeResolver; the FqsenResolver will assume -// that the given value is not a type but most definitely a reference to another element. This is -// because conflicts between type keywords and class names can exist and if you know a reference -// is not a type but an element you can force that keywords are resolved. -var_dump((string)$fqsenResolver->resolve('string', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php deleted file mode 100644 index a93728c8..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php +++ /dev/null @@ -1,22 +0,0 @@ -createForNamespace('My\Example', file_get_contents('Classy.php')); - -// Class named: \phpDocumentor\Reflection\Types\Resolver -var_dump((string)$typeResolver->resolve('Types\Resolver', $context)); - -// String -var_dump((string)$typeResolver->resolve('string', $context)); - -// Property named: \phpDocumentor\Reflection\Types\Resolver::$keyWords -var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/Classy.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/Classy.php deleted file mode 100644 index 0705266f..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/Classy.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - 40 - - - diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/phpunit.xml.dist b/lib/composer/vendor/phpdocumentor/type-resolver/phpunit.xml.dist deleted file mode 100644 index 3246bef4..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/phpunit.xml.dist +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - ./tests/unit - - - - - ./src/ - - - ./examples/ - ./vendor/ - - - - - - diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php index a0e0041c..9aa6ba30 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php @@ -52,6 +52,7 @@ class FqsenResolver * @param Context $context * * @return Fqsen + * @throws \InvalidArgumentException when type is not a valid FQSEN. */ private function resolvePartialStructuralElementName($type, Context $context) { diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/TypeResolver.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/TypeResolver.php index 3a68a4d3..08b2a5f8 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/TypeResolver.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/TypeResolver.php @@ -15,6 +15,8 @@ namespace phpDocumentor\Reflection; use phpDocumentor\Reflection\Types\Array_; use phpDocumentor\Reflection\Types\Compound; use phpDocumentor\Reflection\Types\Context; +use phpDocumentor\Reflection\Types\Iterable_; +use phpDocumentor\Reflection\Types\Nullable; use phpDocumentor\Reflection\Types\Object_; final class TypeResolver @@ -27,27 +29,29 @@ final class TypeResolver /** @var string[] List of recognized keywords and unto which Value Object they map */ private $keywords = array( - 'string' => 'phpDocumentor\Reflection\Types\String_', - 'int' => 'phpDocumentor\Reflection\Types\Integer', - 'integer' => 'phpDocumentor\Reflection\Types\Integer', - 'bool' => 'phpDocumentor\Reflection\Types\Boolean', - 'boolean' => 'phpDocumentor\Reflection\Types\Boolean', - 'float' => 'phpDocumentor\Reflection\Types\Float_', - 'double' => 'phpDocumentor\Reflection\Types\Float_', - 'object' => 'phpDocumentor\Reflection\Types\Object_', - 'mixed' => 'phpDocumentor\Reflection\Types\Mixed', - 'array' => 'phpDocumentor\Reflection\Types\Array_', - 'resource' => 'phpDocumentor\Reflection\Types\Resource', - 'void' => 'phpDocumentor\Reflection\Types\Void_', - 'null' => 'phpDocumentor\Reflection\Types\Null_', - 'scalar' => 'phpDocumentor\Reflection\Types\Scalar', - 'callback' => 'phpDocumentor\Reflection\Types\Callable_', - 'callable' => 'phpDocumentor\Reflection\Types\Callable_', - 'false' => 'phpDocumentor\Reflection\Types\Boolean', - 'true' => 'phpDocumentor\Reflection\Types\Boolean', - 'self' => 'phpDocumentor\Reflection\Types\Self_', - '$this' => 'phpDocumentor\Reflection\Types\This', - 'static' => 'phpDocumentor\Reflection\Types\Static_' + 'string' => Types\String_::class, + 'int' => Types\Integer::class, + 'integer' => Types\Integer::class, + 'bool' => Types\Boolean::class, + 'boolean' => Types\Boolean::class, + 'float' => Types\Float_::class, + 'double' => Types\Float_::class, + 'object' => Object_::class, + 'mixed' => Types\Mixed_::class, + 'array' => Array_::class, + 'resource' => Types\Resource_::class, + 'void' => Types\Void_::class, + 'null' => Types\Null_::class, + 'scalar' => Types\Scalar::class, + 'callback' => Types\Callable_::class, + 'callable' => Types\Callable_::class, + 'false' => Types\Boolean::class, + 'true' => Types\Boolean::class, + 'self' => Types\Self_::class, + '$this' => Types\This::class, + 'static' => Types\Static_::class, + 'parent' => Types\Parent_::class, + 'iterable' => Iterable_::class, ); /** @var FqsenResolver */ @@ -100,6 +104,8 @@ final class TypeResolver } switch (true) { + case $this->isNullableType($type): + return $this->resolveNullableType($type, $context); case $this->isKeyword($type): return $this->resolveKeyword($type); case ($this->isCompoundType($type)): @@ -206,6 +212,18 @@ final class TypeResolver return strpos($type, '|') !== false; } + /** + * Test whether the given type is a nullable type (i.e. `?string`) + * + * @param string $type + * + * @return bool + */ + private function isNullableType($type) + { + return $type[0] === '?'; + } + /** * Resolves the given typed array string (i.e. `string[]`) into an Array object with the right types set. * @@ -237,6 +255,7 @@ final class TypeResolver * Resolves the given FQSEN string into an FQSEN object. * * @param string $type + * @param Context|null $context * * @return Object_ */ @@ -263,4 +282,17 @@ final class TypeResolver return new Compound($types); } + + /** + * Resolve nullable types (i.e. `?string`) into a Nullable type wrapper + * + * @param string $type + * @param Context $context + * + * @return Nullable + */ + private function resolveNullableType($type, Context $context) + { + return new Nullable($this->resolve(ltrim($type, '?'), $context)); + } } diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Array_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Array_.php index 45276c6b..49b7c6ea 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Array_.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Array_.php @@ -12,7 +12,6 @@ namespace phpDocumentor\Reflection\Types; -use phpDocumentor\Reflection\Fqsen; use phpDocumentor\Reflection\Type; /** @@ -20,7 +19,7 @@ use phpDocumentor\Reflection\Type; * * An array can be represented in two forms: * - * 1. Untyped (`array`), where the key and value type is unknown and hence classified as 'Mixed'. + * 1. Untyped (`array`), where the key and value type is unknown and hence classified as 'Mixed_'. * 2. Types (`string[]`), where the value type is provided by preceding an opening and closing square bracket with a * type name. */ @@ -44,7 +43,7 @@ final class Array_ implements Type $keyType = new Compound([ new String_(), new Integer() ]); } if ($valueType === null) { - $valueType = new Mixed(); + $valueType = new Mixed_(); } $this->valueType = $valueType; @@ -78,7 +77,7 @@ final class Array_ implements Type */ public function __toString() { - if ($this->valueType instanceof Mixed) { + if ($this->valueType instanceof Mixed_) { return 'array'; } diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Compound.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Compound.php index 3e5ebb5c..be986c31 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Compound.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Compound.php @@ -12,6 +12,8 @@ namespace phpDocumentor\Reflection\Types; +use ArrayIterator; +use IteratorAggregate; use phpDocumentor\Reflection\Type; /** @@ -21,15 +23,16 @@ use phpDocumentor\Reflection\Type; * using an OR operator (`|`). This combination of types signifies that whatever is associated with this compound type * may contain a value with any of the given types. */ -final class Compound implements Type +final class Compound implements Type, IteratorAggregate { /** @var Type[] */ - private $types = []; + private $types; /** * Initializes a compound type (i.e. `string|int`) and tests if the provided types all implement the Type interface. * * @param Type[] $types + * @throws \InvalidArgumentException when types are not all instance of Type */ public function __construct(array $types) { @@ -79,4 +82,12 @@ final class Compound implements Type { return implode('|', $this->types); } + + /** + * {@inheritdoc} + */ + public function getIterator() + { + return new ArrayIterator($this->types); + } } diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Context.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Context.php index b4aa8f21..4e9ce5a0 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Context.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Context.php @@ -29,10 +29,10 @@ namespace phpDocumentor\Reflection\Types; final class Context { /** @var string The current namespace. */ - private $namespace = ''; + private $namespace; /** @var array List of namespace aliases => Fully Qualified Namespace. */ - private $namespaceAliases = []; + private $namespaceAliases; /** * Initializes the new context and normalizes all passed namespaces to be in Qualified Namespace Name (QNN) @@ -51,7 +51,7 @@ final class Context if ($fqnn[0] === '\\') { $fqnn = substr($fqnn, 1); } - if ($fqnn[count($fqnn)-1] === '\\') { + if ($fqnn[strlen($fqnn) - 1] === '\\') { $fqnn = substr($fqnn, 0, -1); } diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php index 147df694..30936a30 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php @@ -32,7 +32,7 @@ final class ContextFactory /** * Build a Context given a Class Reflection. * - * @param \ReflectionClass $reflector + * @param \Reflector $reflector * * @see Context for more information on Contexts. * diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php new file mode 100644 index 00000000..0cbf48f7 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing iterable type + */ +final class Iterable_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'iterable'; + } +} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php similarity index 95% rename from lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php rename to lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php index 79695f45..c1c165f4 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php @@ -17,7 +17,7 @@ use phpDocumentor\Reflection\Type; /** * Value Object representing an unknown, or mixed, type. */ -final class Mixed implements Type +final class Mixed_ implements Type { /** * Returns a rendered output of the Type as it would be used in a DocBlock. diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Nullable.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Nullable.php new file mode 100644 index 00000000..3c6d1b13 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Nullable.php @@ -0,0 +1,56 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing a nullable type. The real type is wrapped. + */ +final class Nullable implements Type +{ + /** + * @var Type + */ + private $realType; + + /** + * Initialises this nullable type using the real type embedded + * + * @param Type $realType + */ + public function __construct(Type $realType) + { + $this->realType = $realType; + } + + /** + * Provide access to the actual type directly, if needed. + * + * @return Type + */ + public function getActualType() + { + return $this->realType; + } + + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return '?' . $this->realType->__toString(); + } +} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Object_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Object_.php index b337c715..389f7c70 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Object_.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Object_.php @@ -31,6 +31,7 @@ final class Object_ implements Type * Initializes this object with an optional FQSEN, if not provided this object is considered 'untyped'. * * @param Fqsen $fqsen + * @throws \InvalidArgumentException when provided $fqsen is not a valid type. */ public function __construct(Fqsen $fqsen = null) { diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php new file mode 100644 index 00000000..aabdbfb3 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php @@ -0,0 +1,33 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the 'parent' type. + * + * Parent, as a Type, represents the parent class of class in which the associated element was defined. + */ +final class Parent_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'parent'; + } +} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource_.php similarity index 94% rename from lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource.php rename to lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource_.php index 2c2526b7..a1b613dc 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource_.php @@ -17,7 +17,7 @@ use phpDocumentor\Reflection\Type; /** * Value Object representing the 'resource' Type. */ -final class Resource implements Type +final class Resource_ implements Type { /** * Returns a rendered output of the Type as it would be used in a DocBlock. diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/TypeResolverTest.php b/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/TypeResolverTest.php deleted file mode 100644 index f226f8ed..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/TypeResolverTest.php +++ /dev/null @@ -1,395 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use Mockery as m; -use phpDocumentor\Reflection\Types\Array_; -use phpDocumentor\Reflection\Types\Compound; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\Object_; - -/** - * @coversDefaultClass phpDocumentor\Reflection\TypeResolver - */ -class TypeResolverTest extends \PHPUnit_Framework_TestCase -{ - /** - * @param string $keyword - * @param string $expectedClass - * - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\Object_ - * - * @dataProvider provideKeywords - */ - public function testResolvingKeywords($keyword, $expectedClass) - { - $fixture = new TypeResolver(); - - $resolvedType = $fixture->resolve($keyword, new Context('')); - - $this->assertInstanceOf($expectedClass, $resolvedType); - } - - /** - * @param string $fqsen - * - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - * - * @dataProvider provideFqcn - */ - public function testResolvingFQSENs($fqsen) - { - $fixture = new TypeResolver(); - - /** @var Object_ $resolvedType */ - $resolvedType = $fixture->resolve($fqsen, new Context('')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Fqsen', $resolvedType->getFqsen()); - $this->assertSame($fqsen, (string)$resolvedType); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - */ - public function testResolvingRelativeQSENsBasedOnNamespace() - { - $fixture = new TypeResolver(); - - /** @var Object_ $resolvedType */ - $resolvedType = $fixture->resolve('DocBlock', new Context('phpDocumentor\Reflection')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Fqsen', $resolvedType->getFqsen()); - $this->assertSame('\phpDocumentor\Reflection\DocBlock', (string)$resolvedType); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - */ - public function testResolvingRelativeQSENsBasedOnNamespaceAlias() - { - $fixture = new TypeResolver(); - - /** @var Object_ $resolvedType */ - $resolvedType = $fixture->resolve( - 'm\MockInterface', - new Context('phpDocumentor\Reflection', ['m' => '\Mockery']) - ); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Fqsen', $resolvedType->getFqsen()); - $this->assertSame('\Mockery\MockInterface', (string)$resolvedType); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\String_ - */ - public function testResolvingTypedArrays() - { - $fixture = new TypeResolver(); - - /** @var Array_ $resolvedType */ - $resolvedType = $fixture->resolve('string[]', new Context('')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $resolvedType); - $this->assertSame('string[]', (string)$resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType->getKeyType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\String_', $resolvedType->getValueType()); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\String_ - */ - public function testResolvingNestedTypedArrays() - { - $fixture = new TypeResolver(); - - /** @var Array_ $resolvedType */ - $resolvedType = $fixture->resolve('string[][]', new Context('')); - - /** @var Array_ $childValueType */ - $childValueType = $resolvedType->getValueType(); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $resolvedType); - - $this->assertSame('string[][]', (string)$resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType->getKeyType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $childValueType); - - $this->assertSame('string[]', (string)$childValueType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $childValueType->getKeyType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\String_', $childValueType->getValueType()); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Compound - * @uses phpDocumentor\Reflection\Types\String_ - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - */ - public function testResolvingCompoundTypes() - { - $fixture = new TypeResolver(); - - /** @var Compound $resolvedType */ - $resolvedType = $fixture->resolve('string|Reflection\DocBlock', new Context('phpDocumentor')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType); - $this->assertSame('string|\phpDocumentor\Reflection\DocBlock', (string)$resolvedType); - - /** @var String $secondType */ - $firstType = $resolvedType->get(0); - - /** @var Object_ $secondType */ - $secondType = $resolvedType->get(1); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\String_', $firstType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $secondType); - $this->assertInstanceOf('phpDocumentor\Reflection\Fqsen', $secondType->getFqsen()); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Compound - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - */ - public function testResolvingCompoundTypedArrayTypes() - { - $fixture = new TypeResolver(); - - /** @var Compound $resolvedType */ - $resolvedType = $fixture->resolve('\stdClass[]|Reflection\DocBlock[]', new Context('phpDocumentor')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType); - $this->assertSame('\stdClass[]|\phpDocumentor\Reflection\DocBlock[]', (string)$resolvedType); - - /** @var Array_ $secondType */ - $firstType = $resolvedType->get(0); - - /** @var Array_ $secondType */ - $secondType = $resolvedType->get(1); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $firstType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $secondType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $firstType->getValueType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $secondType->getValueType()); - } - - /** - * This test asserts that the parameter order is correct. - * - * When you pass two arrays separated by the compound operator (i.e. 'integer[]|string[]') then we always split the - * expression in its compound parts and then we parse the types with the array operators. If we were to switch the - * order around then 'integer[]|string[]' would read as an array of string or integer array; which is something - * other than what we intend. - * - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Compound - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\Integer - * @uses phpDocumentor\Reflection\Types\String_ - */ - public function testResolvingCompoundTypesWithTwoArrays() - { - $fixture = new TypeResolver(); - - /** @var Compound $resolvedType */ - $resolvedType = $fixture->resolve('integer[]|string[]', new Context('')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType); - $this->assertSame('int[]|string[]', (string)$resolvedType); - - /** @var Array_ $firstType */ - $firstType = $resolvedType->get(0); - - /** @var Array_ $secondType */ - $secondType = $resolvedType->get(1); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $firstType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Integer', $firstType->getValueType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $secondType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\String_', $secondType->getValueType()); - } - - /** - * @covers ::__construct - * @covers ::addKeyword - * @uses phpDocumentor\Reflection\TypeResolver::resolve - * @uses phpDocumentor\Reflection\TypeResolver:: - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testAddingAKeyword() - { - // Assign - $typeMock = m::mock(Type::class); - - // Act - $fixture = new TypeResolver(); - $fixture->addKeyword('mock', get_class($typeMock)); - - // Assert - $result = $fixture->resolve('mock', new Context('')); - $this->assertInstanceOf(get_class($typeMock), $result); - $this->assertNotSame($typeMock, $result); - } - - /** - * @covers ::__construct - * @covers ::addKeyword - * @uses phpDocumentor\Reflection\Types\Context - * @expectedException \InvalidArgumentException - */ - public function testAddingAKeywordFailsIfTypeClassDoesNotExist() - { - $fixture = new TypeResolver(); - $fixture->addKeyword('mock', 'IDoNotExist'); - } - - /** - * @covers ::__construct - * @covers ::addKeyword - * @uses phpDocumentor\Reflection\Types\Context - * @expectedException \InvalidArgumentException - */ - public function testAddingAKeywordFailsIfTypeClassDoesNotImplementTypeInterface() - { - $fixture = new TypeResolver(); - $fixture->addKeyword('mock', 'stdClass'); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @uses phpDocumentor\Reflection\Types\Context - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfTypeIsEmpty() - { - $fixture = new TypeResolver(); - $fixture->resolve(' ', new Context('')); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @uses phpDocumentor\Reflection\Types\Context - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfTypeIsNotAString() - { - $fixture = new TypeResolver(); - $fixture->resolve(['a'], new Context('')); - } - - /** - * Returns a list of keywords and expected classes that are created from them. - * - * @return string[][] - */ - public function provideKeywords() - { - return [ - ['string', 'phpDocumentor\Reflection\Types\String_'], - ['int', 'phpDocumentor\Reflection\Types\Integer'], - ['integer', 'phpDocumentor\Reflection\Types\Integer'], - ['float', 'phpDocumentor\Reflection\Types\Float_'], - ['double', 'phpDocumentor\Reflection\Types\Float_'], - ['bool', 'phpDocumentor\Reflection\Types\Boolean'], - ['boolean', 'phpDocumentor\Reflection\Types\Boolean'], - ['resource', 'phpDocumentor\Reflection\Types\Resource'], - ['null', 'phpDocumentor\Reflection\Types\Null_'], - ['callable', 'phpDocumentor\Reflection\Types\Callable_'], - ['callback', 'phpDocumentor\Reflection\Types\Callable_'], - ['array', 'phpDocumentor\Reflection\Types\Array_'], - ['scalar', 'phpDocumentor\Reflection\Types\Scalar'], - ['object', 'phpDocumentor\Reflection\Types\Object_'], - ['mixed', 'phpDocumentor\Reflection\Types\Mixed'], - ['void', 'phpDocumentor\Reflection\Types\Void_'], - ['$this', 'phpDocumentor\Reflection\Types\This'], - ['static', 'phpDocumentor\Reflection\Types\Static_'], - ['self', 'phpDocumentor\Reflection\Types\Self_'], - ]; - } - - /** - * Provides a list of FQSENs to test the resolution patterns with. - * - * @return string[][] - */ - public function provideFqcn() - { - return [ - 'namespace' => ['\phpDocumentor\Reflection'], - 'class' => ['\phpDocumentor\Reflection\DocBlock'], - ]; - } -} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextFactoryTest.php b/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextFactoryTest.php deleted file mode 100644 index 20d63c95..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextFactoryTest.php +++ /dev/null @@ -1,188 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\Types { - -// Added imports on purpose as mock for the unit tests, please do not remove. - use Mockery as m; - use phpDocumentor\Reflection\DocBlock, - phpDocumentor\Reflection\DocBlock\Tag; - use phpDocumentor; - use \ReflectionClass; // yes, the slash is part of the test - - /** - * @coversDefaultClass \phpDocumentor\Reflection\Types\ContextFactory - * @covers :: - */ - class ContextFactoryTest extends \PHPUnit_Framework_TestCase - { - /** - * @covers ::createFromReflector - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testReadsNamespaceFromClassReflection() - { - $fixture = new ContextFactory(); - $context = $fixture->createFromReflector(new ReflectionClass($this)); - - $this->assertSame(__NAMESPACE__, $context->getNamespace()); - } - - /** - * @covers ::createFromReflector - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testReadsAliasesFromClassReflection() - { - $fixture = new ContextFactory(); - $expected = [ - 'm' => 'Mockery', - 'DocBlock' => 'phpDocumentor\Reflection\DocBlock', - 'Tag' => 'phpDocumentor\Reflection\DocBlock\Tag', - 'phpDocumentor' => 'phpDocumentor', - 'ReflectionClass' => 'ReflectionClass' - ]; - $context = $fixture->createFromReflector(new ReflectionClass($this)); - - $this->assertSame($expected, $context->getNamespaceAliases()); - } - - /** - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testReadsNamespaceFromProvidedNamespaceAndContent() - { - $fixture = new ContextFactory(); - $context = $fixture->createForNamespace(__NAMESPACE__, file_get_contents(__FILE__)); - - $this->assertSame(__NAMESPACE__, $context->getNamespace()); - } - - /** - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testReadsAliasesFromProvidedNamespaceAndContent() - { - $fixture = new ContextFactory(); - $expected = [ - 'm' => 'Mockery', - 'DocBlock' => 'phpDocumentor\Reflection\DocBlock', - 'Tag' => 'phpDocumentor\Reflection\DocBlock\Tag', - 'phpDocumentor' => 'phpDocumentor', - 'ReflectionClass' => 'ReflectionClass' - ]; - $context = $fixture->createForNamespace(__NAMESPACE__, file_get_contents(__FILE__)); - - $this->assertSame($expected, $context->getNamespaceAliases()); - } - - /** - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testTraitUseIsNotDetectedAsNamespaceUse() - { - $php = "createForNamespace('Foo', $php); - - $this->assertSame([], $context->getNamespaceAliases()); - } - - /** - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testAllOpeningBracesAreCheckedWhenSearchingForEndOfClass() - { - $php = 'createForNamespace('Foo', $php); - - $this->assertSame([], $context->getNamespaceAliases()); - } - - /** - * @covers ::createFromReflector - */ - public function testEmptyFileName() - { - $fixture = new ContextFactory(); - $context = $fixture->createFromReflector(new \ReflectionClass('stdClass')); - - $this->assertSame([], $context->getNamespaceAliases()); - } - - /** - * @covers ::createFromReflector - */ - public function testEvalDClass() - { - eval(<<createFromReflector(new \ReflectionClass('Foo\Bar')); - - $this->assertSame([], $context->getNamespaceAliases()); - } - } -} - -namespace phpDocumentor\Reflection\Types\Mock { - // the following import should not show in the tests above - use phpDocumentor\Reflection\DocBlock\Description; -} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextTest.php b/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextTest.php deleted file mode 100644 index 165f415d..00000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextTest.php +++ /dev/null @@ -1,61 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\Types; - -use Mockery as m; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\Types\Context - */ -class ContextTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::getNamespace - */ - public function testProvidesANormalizedNamespace() - { - $fixture = new Context('\My\Space'); - $this->assertSame('My\Space', $fixture->getNamespace()); - } - - /** - * @covers ::__construct - * @covers ::getNamespace - */ - public function testInterpretsNamespaceNamedGlobalAsRootNamespace() - { - $fixture = new Context('global'); - $this->assertSame('', $fixture->getNamespace()); - } - - /** - * @covers ::__construct - * @covers ::getNamespace - */ - public function testInterpretsNamespaceNamedDefaultAsRootNamespace() - { - $fixture = new Context('default'); - $this->assertSame('', $fixture->getNamespace()); - } - - /** - * @covers ::__construct - * @covers ::getNamespaceAliases - */ - public function testProvidesNormalizedNamespaceAliases() - { - $fixture = new Context('', ['Space' => '\My\Space']); - $this->assertSame(['Space' => 'My\Space'], $fixture->getNamespaceAliases()); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/.travis.yml b/lib/composer/vendor/phpspec/prophecy/.travis.yml deleted file mode 100644 index e75c39ef..00000000 --- a/lib/composer/vendor/phpspec/prophecy/.travis.yml +++ /dev/null @@ -1,29 +0,0 @@ -language: php - -php: [5.3, 5.4, 5.5, 5.6, 7.0, hhvm] - -sudo: false - -cache: - directories: - - $HOME/.composer/cache - -branches: - except: - - /^bugfix\/.*$/ - - /^feature\/.*$/ - - /^optimization\/.*$/ - -matrix: - fast_finish: true - include: - - php: '7.0' - env: PHPDOCUMENTOR_REFLECTION_DOCBLOCK="^2.0" - -before_script: - - if [ -n "$PHPDOCUMENTOR_REFLECTION_DOCBLOCK" ]; then - composer require "phpdocumentor/reflection-docblock:${PHPDOCUMENTOR_REFLECTION_DOCBLOCK}" --no-update; - fi; - - travis_retry composer update --no-interaction - -script: vendor/bin/phpspec run -fpretty -v diff --git a/lib/composer/vendor/phpspec/prophecy/CHANGES.md b/lib/composer/vendor/phpspec/prophecy/CHANGES.md index 444c1fa6..6a3ad33a 100644 --- a/lib/composer/vendor/phpspec/prophecy/CHANGES.md +++ b/lib/composer/vendor/phpspec/prophecy/CHANGES.md @@ -1,3 +1,34 @@ +1.7.2 / 2017-10-04 +================== + +* Reverted "check method predictions only once" due to it breaking Spies + +1.7.1 / 2017-10-03 +================== + +* Allow PHP5 keywords methods generation on PHP7 (thanks @bycosta) +* Allow reflection-docblock v4 (thanks @GrahamCampbell) +* Check method predictions only once (thanks @dontub) +* Escape file path sent to \SplFileObjectConstructor when running on Windows (thanks @danmartin-epiphany) + +1.7.0 / 2017-03-02 +================== + +* Add full PHP 7.1 Support (thanks @prolic) +* Allow `sebastian/comparator ^2.0` (thanks @sebastianbergmann) +* Allow `sebastian/recursion-context ^3.0` (thanks @sebastianbergmann) +* Allow `\Error` instances in `ThrowPromise` (thanks @jameshalsall) +* Support `phpspec/phpspect ^3.2` (thanks @Sam-Burns) +* Fix failing builds (thanks @Sam-Burns) + +1.6.2 / 2016-11-21 +================== + +* Added support for detecting @method on interfaces that the class itself implements, or when the stubbed class is an interface itself (thanks @Seldaek) +* Added support for sebastian/recursion-context 2 (thanks @sebastianbergmann) +* Added testing on PHP 7.1 on Travis (thanks @danizord) +* Fixed the usage of the phpunit comparator (thanks @Anyqax) + 1.6.1 / 2016-06-07 ================== diff --git a/lib/composer/vendor/phpspec/prophecy/CONTRIBUTING.md b/lib/composer/vendor/phpspec/prophecy/CONTRIBUTING.md deleted file mode 100644 index 72d8e933..00000000 --- a/lib/composer/vendor/phpspec/prophecy/CONTRIBUTING.md +++ /dev/null @@ -1,21 +0,0 @@ -Contributing ------------- - -Prophecy is an open source, community-driven project. If you'd like to contribute, -feel free to do this, but remember to follow these few simple rules: - -- Make your feature addition or bug fix, -- Add either specs or examples for any changes you're making (bugfixes or additions) - (please look into `spec/` folder for some examples). This is important so we don't break - it in a future version unintentionally, -- Commit your code, but do not mess with `CHANGES.md`, - -Running tests -------------- - -Make sure that you don't break anything with your changes by running: - -```bash -$> composer install --prefer-dist -$> vendor/bin/phpspec run -``` diff --git a/lib/composer/vendor/phpspec/prophecy/README.md b/lib/composer/vendor/phpspec/prophecy/README.md index 65ec16c4..b190d43e 100644 --- a/lib/composer/vendor/phpspec/prophecy/README.md +++ b/lib/composer/vendor/phpspec/prophecy/README.md @@ -159,7 +159,7 @@ promise, there's plenty others you can use: - `ReturnPromise` or `->willReturn(1)` - returns a value from a method call - `ReturnArgumentPromise` or `->willReturnArgument($index)` - returns the nth method argument from call -- `ThrowPromise` or `->willThrow` - causes the method to throw specific exception +- `ThrowPromise` or `->willThrow($exception)` - causes the method to throw specific exception - `CallbackPromise` or `->will($callback)` - gives you a quick way to define your own custom logic Keep in mind, that you can always add even more promises by implementing diff --git a/lib/composer/vendor/phpspec/prophecy/composer.json b/lib/composer/vendor/phpspec/prophecy/composer.json index 23131b20..5bdbdb3e 100644 --- a/lib/composer/vendor/phpspec/prophecy/composer.json +++ b/lib/composer/vendor/phpspec/prophecy/composer.json @@ -19,14 +19,15 @@ "require": { "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", "doctrine/instantiator": "^1.0.2", - "sebastian/recursion-context": "^1.0" + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.0" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "autoload": { @@ -35,9 +36,15 @@ } }, + "autoload-dev": { + "psr-4": { + "Fixtures\\Prophecy\\": "fixtures" + } + }, + "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } } } diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php deleted file mode 100644 index 5d6a2da3..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php +++ /dev/null @@ -1,146 +0,0 @@ -beConstructedWith(array(42, 'zet', $object)); - - $class = get_class($object->getWrappedObject()); - $hash = spl_object_hash($object->getWrappedObject()); - - $this->__toString()->shouldReturn("exact(42), exact(\"zet\"), exact($class:$hash Object (\n 'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n))"); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_generates_string_representation_from_all_tokens_imploded($token1, $token2, $token3) - { - $token1->__toString()->willReturn('token_1'); - $token2->__toString()->willReturn('token_2'); - $token3->__toString()->willReturn('token_3'); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->__toString()->shouldReturn('token_1, token_2, token_3'); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token - */ - function it_exposes_list_of_tokens($token) - { - $this->beConstructedWith(array($token)); - - $this->getTokens()->shouldReturn(array($token)); - } - - function it_returns_score_of_1_if_there_are_no_tokens_and_arguments() - { - $this->beConstructedWith(array()); - - $this->scoreArguments(array())->shouldReturn(1); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_should_return_match_score_based_on_all_tokens_score($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - $token2->scoreArgument(2)->willReturn(5); - $token2->isLast()->willReturn(false); - $token3->scoreArgument($obj = new \stdClass())->willReturn(10); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2, $obj))->shouldReturn(18); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_returns_false_if_there_is_less_arguments_than_tokens($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - $token2->scoreArgument(2)->willReturn(5); - $token2->isLast()->willReturn(false); - $token3->scoreArgument(null)->willReturn(false); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2))->shouldReturn(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_returns_false_if_there_is_less_tokens_than_arguments($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - $token2->scoreArgument(2)->willReturn(5); - $token2->isLast()->willReturn(false); - $token3->scoreArgument($obj = new \stdClass())->willReturn(10); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2, $obj, 4))->shouldReturn(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_should_return_false_if_one_of_the_tokens_returns_false($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - $token2->scoreArgument(2)->willReturn(false); - $token2->isLast()->willReturn(false); - $token3->scoreArgument($obj = new \stdClass())->willReturn(10); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2, $obj))->shouldReturn(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_should_calculate_score_until_last_token($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - - $token2->scoreArgument(2)->willReturn(7); - $token2->isLast()->willReturn(true); - - $token3->scoreArgument($obj = new \stdClass())->willReturn(10); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2, $obj))->shouldReturn(10); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValueTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValueTokenSpec.php deleted file mode 100644 index a43e923c..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValueTokenSpec.php +++ /dev/null @@ -1,28 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function its_string_representation_is_star() - { - $this->__toString()->shouldReturn('*'); - } - - function it_scores_any_argument_as_3() - { - $this->scoreArgument(42)->shouldReturn(3); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValuesTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValuesTokenSpec.php deleted file mode 100644 index c29076f5..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValuesTokenSpec.php +++ /dev/null @@ -1,28 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_last() - { - $this->shouldBeLast(); - } - - function its_string_representation_is_star_with_followup() - { - $this->__toString()->shouldReturn('* [, ...]'); - } - - function it_scores_any_argument_as_2() - { - $this->scoreArgument(42)->shouldReturn(2); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php deleted file mode 100644 index 8799d6d5..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php +++ /dev/null @@ -1,55 +0,0 @@ -beConstructedWith(10.12345678, 4); - } - - function it_is_initializable() - { - $this->shouldHaveType('Prophecy\Argument\Token\ApproximateValueToken'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_10_if_rounded_argument_matches_rounded_value() - { - $this->scoreArgument(10.12345)->shouldReturn(10); - } - - function it_does_not_score_if_rounded_argument_does_not_match_rounded_value() - { - $this->scoreArgument(10.1234)->shouldReturn(false); - } - - function it_uses_a_default_precision_of_zero() - { - $this->beConstructedWith(10.7); - $this->scoreArgument(11.4)->shouldReturn(10); - } - - function it_does_not_score_if_rounded_argument_is_not_numeric() - { - $this->scoreArgument('hello')->shouldReturn(false); - } - - function it_has_simple_string_representation() - { - $this->__toString()->shouldBe('≅10.1235'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayCountTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayCountTokenSpec.php deleted file mode 100644 index 5d040d59..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayCountTokenSpec.php +++ /dev/null @@ -1,64 +0,0 @@ -beConstructedWith(2); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_6_if_argument_array_has_proper_count() - { - $this->scoreArgument(array(1,2))->shouldReturn(6); - } - - /** - * @param \Countable $countable - */ - function it_scores_6_if_argument_countable_object_has_proper_count($countable) - { - $countable->count()->willReturn(2); - $this->scoreArgument($countable)->shouldReturn(6); - } - - function it_does_not_score_if_argument_is_neither_array_nor_countable_object() - { - $this->scoreArgument('string')->shouldBe(false); - $this->scoreArgument(5)->shouldBe(false); - $this->scoreArgument(new \stdClass)->shouldBe(false); - } - - function it_does_not_score_if_argument_array_has_wrong_count() - { - $this->scoreArgument(array(1))->shouldReturn(false); - } - - /** - * @param \Countable $countable - */ - function it_does_not_score_if_argument_countable_object_has_wrong_count($countable) - { - $countable->count()->willReturn(3); - $this->scoreArgument($countable)->shouldReturn(false); - } - - function it_has_simple_string_representation() - { - $this->__toString()->shouldBe('count(2)'); - } - -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEntryTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEntryTokenSpec.php deleted file mode 100644 index 8ff0f158..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEntryTokenSpec.php +++ /dev/null @@ -1,229 +0,0 @@ -beConstructedWith($key, $value); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_holds_key_and_value($key, $value) - { - $this->getKey()->shouldBe($key); - $this->getValue()->shouldBe($value); - } - - function its_string_representation_tells_that_its_an_array_containing_the_key_value_pair($key, $value) - { - $key->__toString()->willReturn('key'); - $value->__toString()->willReturn('value'); - $this->__toString()->shouldBe('[..., key => value, ...]'); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $key - * @param \stdClass $object - */ - function it_wraps_non_token_value_into_ExactValueToken($key, $object) - { - $this->beConstructedWith($key, $object); - $this->getValue()->shouldHaveType('\Prophecy\Argument\Token\ExactValueToken'); - } - - /** - * @param \stdClass $object - * @param \Prophecy\Argument\Token\TokenInterface $value - */ - function it_wraps_non_token_key_into_ExactValueToken($object, $value) - { - $this->beConstructedWith($object, $value); - $this->getKey()->shouldHaveType('\Prophecy\Argument\Token\ExactValueToken'); - } - - function it_scores_array_half_of_combined_scores_from_key_and_value_tokens($key, $value) - { - $key->scoreArgument('key')->willReturn(4); - $value->scoreArgument('value')->willReturn(6); - $this->scoreArgument(array('key'=>'value'))->shouldBe(5); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \Iterator $object - */ - function it_scores_traversable_object_half_of_combined_scores_from_key_and_value_tokens($key, $value, $object) - { - $object->current()->will(function () use ($object) { - $object->valid()->willReturn(false); - - return 'value'; - }); - $object->key()->willReturn('key'); - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(true); - $key->scoreArgument('key')->willReturn(6); - $value->scoreArgument('value')->willReturn(2); - $this->scoreArgument($object)->shouldBe(4); - } - - /** - * @param \Prophecy\Argument\Token\AnyValuesToken $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \ArrayAccess $object - */ - function it_throws_exception_during_scoring_of_array_accessible_object_if_key_is_not_ExactValueToken($key, $value, $object) - { - $key->__toString()->willReturn('any_token'); - $this->beConstructedWith($key,$value); - $errorMessage = 'You can only use exact value tokens to match key of ArrayAccess object'.PHP_EOL. - 'But you used `any_token`.'; - $this->shouldThrow(new InvalidArgumentException($errorMessage))->duringScoreArgument($object); - } - - /** - * @param \Prophecy\Argument\Token\ExactValueToken $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \ArrayAccess $object - */ - function it_scores_array_accessible_object_half_of_combined_scores_from_key_and_value_tokens($key, $value, $object) - { - $object->offsetExists('key')->willReturn(true); - $object->offsetGet('key')->willReturn('value'); - $key->getValue()->willReturn('key'); - $key->scoreArgument('key')->willReturn(3); - $value->scoreArgument('value')->willReturn(1); - $this->scoreArgument($object)->shouldBe(2); - } - - /** - * @param \Prophecy\Argument\Token\AnyValuesToken $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \ArrayIterator $object - */ - function it_accepts_any_key_token_type_to_score_object_that_is_both_traversable_and_array_accessible($key, $value, $object) - { - $this->beConstructedWith($key, $value); - $object->current()->will(function () use ($object) { - $object->valid()->willReturn(false); - - return 'value'; - }); - $object->key()->willReturn('key'); - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(true); - $this->shouldNotThrow(new InvalidArgumentException)->duringScoreArgument($object); - } - - function it_does_not_score_if_argument_is_neither_array_nor_traversable_nor_array_accessible() - { - $this->scoreArgument('string')->shouldBe(false); - $this->scoreArgument(new \stdClass)->shouldBe(false); - } - - function it_does_not_score_empty_array() - { - $this->scoreArgument(array())->shouldBe(false); - } - - function it_does_not_score_array_if_key_and_value_tokens_do_not_score_same_entry($key, $value) - { - $argument = array(1 => 'foo', 2 => 'bar'); - $key->scoreArgument(1)->willReturn(true); - $key->scoreArgument(2)->willReturn(false); - $value->scoreArgument('foo')->willReturn(false); - $value->scoreArgument('bar')->willReturn(true); - $this->scoreArgument($argument)->shouldBe(false); - } - - /** - * @param \Iterator $object - */ - function it_does_not_score_traversable_object_without_entries($object) - { - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(false); - $this->scoreArgument($object)->shouldBe(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \Iterator $object - */ - function it_does_not_score_traversable_object_if_key_and_value_tokens_do_not_score_same_entry($key, $value, $object) - { - $object->current()->willReturn('foo'); - $object->current()->will(function () use ($object) { - $object->valid()->willReturn(false); - - return 'bar'; - }); - $object->key()->willReturn(1); - $object->key()->willReturn(2); - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(true); - $key->scoreArgument(1)->willReturn(true); - $key->scoreArgument(2)->willReturn(false); - $value->scoreArgument('foo')->willReturn(false); - $value->scoreArgument('bar')->willReturn(true); - $this->scoreArgument($object)->shouldBe(false); - } - - /** - * @param \Prophecy\Argument\Token\ExactValueToken $key - * @param \ArrayAccess $object - */ - function it_does_not_score_array_accessible_object_if_it_has_no_offset_with_key_token_value($key, $object) - { - $object->offsetExists('key')->willReturn(false); - $key->getValue()->willReturn('key'); - $this->scoreArgument($object)->shouldBe(false); - } - - /** - * @param \Prophecy\Argument\Token\ExactValueToken $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \ArrayAccess $object - */ - function it_does_not_score_array_accessible_object_if_key_and_value_tokens_do_not_score_same_entry($key, $value, $object) - { - $object->offsetExists('key')->willReturn(true); - $object->offsetGet('key')->willReturn('value'); - $key->getValue()->willReturn('key'); - $value->scoreArgument('value')->willReturn(false); - $key->scoreArgument('key')->willReturn(true); - $this->scoreArgument($object)->shouldBe(false); - } - - function its_score_is_capped_at_8($key, $value) - { - $key->scoreArgument('key')->willReturn(10); - $value->scoreArgument('value')->willReturn(10); - $this->scoreArgument(array('key'=>'value'))->shouldBe(8); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEveryEntryTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEveryEntryTokenSpec.php deleted file mode 100644 index 8662e7d1..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEveryEntryTokenSpec.php +++ /dev/null @@ -1,109 +0,0 @@ -beConstructedWith($value); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_holds_value($value) - { - $this->getValue()->shouldBe($value); - } - - function its_string_representation_tells_that_its_an_array_containing_only_value($value) - { - $value->__toString()->willReturn('value'); - $this->__toString()->shouldBe('[value, ..., value]'); - } - - /** - * @param \stdClass $stdClass - */ - function it_wraps_non_token_value_into_ExactValueToken($stdClass) - { - $this->beConstructedWith($stdClass); - $this->getValue()->shouldHaveType('Prophecy\Argument\Token\ExactValueToken'); - } - - function it_does_not_score_if_argument_is_neither_array_nor_traversable() - { - $this->scoreArgument('string')->shouldBe(false); - $this->scoreArgument(new \stdClass)->shouldBe(false); - } - - function it_does_not_score_empty_array() - { - $this->scoreArgument(array())->shouldBe(false); - } - - /** - * @param \Iterator $object - */ - function it_does_not_score_traversable_object_without_entries($object) - { - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(false); - $this->scoreArgument($object)->shouldBe(false); - } - - function it_scores_avg_of_scores_from_value_tokens($value) - { - $value->scoreArgument('value1')->willReturn(6); - $value->scoreArgument('value2')->willReturn(3); - $this->scoreArgument(array('value1', 'value2'))->shouldBe(4.5); - } - - function it_scores_false_if_entry_scores_false($value) - { - $value->scoreArgument('value1')->willReturn(6); - $value->scoreArgument('value2')->willReturn(false); - $this->scoreArgument(array('value1', 'value2'))->shouldBe(false); - } - - function it_does_not_score_array_keys($value) - { - $value->scoreArgument('value')->willReturn(6); - $value->scoreArgument('key')->shouldNotBeCalled(0); - $this->scoreArgument(array('key' => 'value'))->shouldBe(6); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \Iterator $object - */ - function it_scores_traversable_object_from_value_token($value, $object) - { - $object->current()->will(function ($args, $object) { - $object->valid()->willReturn(false); - - return 'value'; - }); - $object->key()->willReturn('key'); - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(true); - $value->scoreArgument('value')->willReturn(2); - $this->scoreArgument($object)->shouldBe(2); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/CallbackTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/CallbackTokenSpec.php deleted file mode 100644 index 4395bf09..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/CallbackTokenSpec.php +++ /dev/null @@ -1,42 +0,0 @@ -beConstructedWith('get_class'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_7_if_argument_matches_callback() - { - $this->beConstructedWith(function ($argument) { return 2 === $argument; }); - - $this->scoreArgument(2)->shouldReturn(7); - } - - function it_does_not_scores_if_argument_does_not_match_callback() - { - $this->beConstructedWith(function ($argument) { return 2 === $argument; }); - - $this->scoreArgument(5)->shouldReturn(false); - } - - function its_string_representation_should_tell_that_its_callback() - { - $this->__toString()->shouldReturn('callback()'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php deleted file mode 100644 index 9e46e021..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php +++ /dev/null @@ -1,155 +0,0 @@ -beConstructedWith(42); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_holds_value() - { - $this->getValue()->shouldReturn(42); - } - - function it_scores_10_if_value_is_equal_to_argument() - { - $this->scoreArgument(42)->shouldReturn(10); - $this->scoreArgument('42')->shouldReturn(10); - } - - function it_scores_10_if_value_is_an_object_and_equal_to_argument() - { - $value = new \DateTime(); - $value2 = clone $value; - - $this->beConstructedWith($value); - $this->scoreArgument($value2)->shouldReturn(10); - } - - function it_does_not_scores_if_value_is_not_equal_to_argument() - { - $this->scoreArgument(50)->shouldReturn(false); - $this->scoreArgument(new \stdClass())->shouldReturn(false); - } - - function it_does_not_scores_if_value_an_object_and_is_not_equal_to_argument() - { - $value = new ExactValueTokenFixtureB('ABC'); - $value2 = new ExactValueTokenFixtureB('CBA'); - - $this->beConstructedWith($value); - $this->scoreArgument($value2)->shouldReturn(false); - } - - function it_does_not_scores_if_value_type_and_is_not_equal_to_argument() - { - $this->beConstructedWith(false); - $this->scoreArgument(0)->shouldReturn(false); - } - - function it_generates_proper_string_representation_for_integer() - { - $this->beConstructedWith(42); - $this->__toString()->shouldReturn('exact(42)'); - } - - function it_generates_proper_string_representation_for_string() - { - $this->beConstructedWith('some string'); - $this->__toString()->shouldReturn('exact("some string")'); - } - - function it_generates_single_line_representation_for_multiline_string() - { - $this->beConstructedWith("some\nstring"); - $this->__toString()->shouldReturn('exact("some\\nstring")'); - } - - function it_generates_proper_string_representation_for_double() - { - $this->beConstructedWith(42.3); - $this->__toString()->shouldReturn('exact(42.3)'); - } - - function it_generates_proper_string_representation_for_boolean_true() - { - $this->beConstructedWith(true); - $this->__toString()->shouldReturn('exact(true)'); - } - - function it_generates_proper_string_representation_for_boolean_false() - { - $this->beConstructedWith(false); - $this->__toString()->shouldReturn('exact(false)'); - } - - function it_generates_proper_string_representation_for_null() - { - $this->beConstructedWith(null); - $this->__toString()->shouldReturn('exact(null)'); - } - - function it_generates_proper_string_representation_for_empty_array() - { - $this->beConstructedWith(array()); - $this->__toString()->shouldReturn('exact([])'); - } - - function it_generates_proper_string_representation_for_array() - { - $this->beConstructedWith(array('zet', 42)); - $this->__toString()->shouldReturn('exact(["zet", 42])'); - } - - function it_generates_proper_string_representation_for_resource() - { - $resource = fopen(__FILE__, 'r'); - $this->beConstructedWith($resource); - $this->__toString()->shouldReturn('exact(stream:'.$resource.')'); - } - - /** - * @param \stdClass $object - */ - function it_generates_proper_string_representation_for_object($object) - { - $objHash = sprintf('%s:%s', - get_class($object->getWrappedObject()), - spl_object_hash($object->getWrappedObject()) - ); - - $this->beConstructedWith($object); - $this->__toString()->shouldReturn("exact($objHash Object (\n 'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n))"); - } -} - -class ExactValueTokenFixtureA -{ - public $errors; -} - -class ExactValueTokenFixtureB extends ExactValueTokenFixtureA -{ - public $errors; - public $value = null; - - public function __construct($value) - { - $this->value = $value; - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/IdenticalValueTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/IdenticalValueTokenSpec.php deleted file mode 100644 index 00c3a215..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/IdenticalValueTokenSpec.php +++ /dev/null @@ -1,152 +0,0 @@ -beConstructedWith(42); - } - - function it_is_initializable() - { - $this->shouldHaveType('Prophecy\Argument\Token\IdenticalValueToken'); - } - - function it_scores_11_if_string_value_is_identical_to_argument() - { - $this->beConstructedWith('foo'); - $this->scoreArgument('foo')->shouldReturn(11); - } - - function it_scores_11_if_boolean_value_is_identical_to_argument() - { - $this->beConstructedWith(false); - $this->scoreArgument(false)->shouldReturn(11); - } - - function it_scores_11_if_integer_value_is_identical_to_argument() - { - $this->beConstructedWith(31); - $this->scoreArgument(31)->shouldReturn(11); - } - - function it_scores_11_if_float_value_is_identical_to_argument() - { - $this->beConstructedWith(31.12); - $this->scoreArgument(31.12)->shouldReturn(11); - } - - function it_scores_11_if_array_value_is_identical_to_argument() - { - $this->beConstructedWith(array('foo' => 'bar')); - $this->scoreArgument(array('foo' => 'bar'))->shouldReturn(11); - } - - function it_scores_11_if_object_value_is_identical_to_argument() - { - $object = new \stdClass(); - - $this->beConstructedWith($object); - $this->scoreArgument($object)->shouldReturn(11); - } - - function it_scores_false_if_value_is_not_identical_to_argument() - { - $this->beConstructedWith(new \stdClass()); - $this->scoreArgument('foo')->shouldReturn(false); - } - - function it_scores_false_if_object_value_is_not_the_same_instance_than_argument() - { - $this->beConstructedWith(new \stdClass()); - $this->scoreArgument(new \stdClass())->shouldReturn(false); - } - - function it_scores_false_if_integer_value_is_not_identical_to_boolean_argument() - { - $this->beConstructedWith(1); - $this->scoreArgument(true)->shouldReturn(false); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_generates_proper_string_representation_for_integer() - { - $this->beConstructedWith(42); - $this->__toString()->shouldReturn('identical(42)'); - } - - function it_generates_proper_string_representation_for_string() - { - $this->beConstructedWith('some string'); - $this->__toString()->shouldReturn('identical("some string")'); - } - - function it_generates_single_line_representation_for_multiline_string() - { - $this->beConstructedWith("some\nstring"); - $this->__toString()->shouldReturn('identical("some\\nstring")'); - } - - function it_generates_proper_string_representation_for_double() - { - $this->beConstructedWith(42.3); - $this->__toString()->shouldReturn('identical(42.3)'); - } - - function it_generates_proper_string_representation_for_boolean_true() - { - $this->beConstructedWith(true); - $this->__toString()->shouldReturn('identical(true)'); - } - - function it_generates_proper_string_representation_for_boolean_false() - { - $this->beConstructedWith(false); - $this->__toString()->shouldReturn('identical(false)'); - } - - function it_generates_proper_string_representation_for_null() - { - $this->beConstructedWith(null); - $this->__toString()->shouldReturn('identical(null)'); - } - - function it_generates_proper_string_representation_for_empty_array() - { - $this->beConstructedWith(array()); - $this->__toString()->shouldReturn('identical([])'); - } - - function it_generates_proper_string_representation_for_array() - { - $this->beConstructedWith(array('zet', 42)); - $this->__toString()->shouldReturn('identical(["zet", 42])'); - } - - function it_generates_proper_string_representation_for_resource() - { - $resource = fopen(__FILE__, 'r'); - $this->beConstructedWith($resource); - $this->__toString()->shouldReturn('identical(stream:'.$resource.')'); - } - - function it_generates_proper_string_representation_for_object($object) - { - $objHash = sprintf('%s:%s', - get_class($object->getWrappedObject()), - spl_object_hash($object->getWrappedObject()) - ); - - $this->beConstructedWith($object); - $this->__toString()->shouldReturn("identical($objHash Object (\n 'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n))"); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalAndTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalAndTokenSpec.php deleted file mode 100644 index bb5e3840..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalAndTokenSpec.php +++ /dev/null @@ -1,78 +0,0 @@ -beConstructedWith(array()); - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->beConstructedWith(array()); - $this->shouldNotBeLast(); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_generates_string_representation_from_all_tokens_imploded($token1, $token2, $token3) - { - $token1->__toString()->willReturn('token_1'); - $token2->__toString()->willReturn('token_2'); - $token3->__toString()->willReturn('token_3'); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->__toString()->shouldReturn('bool(token_1 AND token_2 AND token_3)'); - } - - function it_wraps_non_token_arguments_into_ExactValueToken() - { - $this->beConstructedWith(array(15, '1985')); - $this->__toString()->shouldReturn("bool(exact(15) AND exact(\"1985\"))"); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - */ - function it_scores_the_maximum_score_from_all_scores_returned_by_tokens($token1, $token2) - { - $token1->scoreArgument(1)->willReturn(10); - $token2->scoreArgument(1)->willReturn(5); - $this->beConstructedWith(array($token1, $token2)); - $this->scoreArgument(1)->shouldReturn(10); - } - - function it_does_not_score_if_there_are_no_arguments_or_tokens() - { - $this->beConstructedWith(array()); - $this->scoreArgument('any')->shouldReturn(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - */ - function it_does_not_score_if_either_of_tokens_does_not_score($token1, $token2) - { - $token1->scoreArgument(1)->willReturn(10); - $token1->scoreArgument(2)->willReturn(false); - - $token2->scoreArgument(1)->willReturn(false); - $token2->scoreArgument(2)->willReturn(10); - - $this->beConstructedWith(array($token1, $token2)); - - $this->scoreArgument(1)->shouldReturn(false); - $this->scoreArgument(2)->shouldReturn(false); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalNotTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalNotTokenSpec.php deleted file mode 100644 index 7ce7f3d8..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalNotTokenSpec.php +++ /dev/null @@ -1,65 +0,0 @@ -beConstructedWith($token); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_holds_originating_token($token) - { - $this->getOriginatingToken()->shouldReturn($token); - } - - function it_has_simple_string_representation($token) - { - $token->__toString()->willReturn('value'); - $this->__toString()->shouldBe('not(value)'); - } - - function it_wraps_non_token_argument_into_ExactValueToken() - { - $this->beConstructedWith(5); - $token = $this->getOriginatingToken(); - $token->shouldhaveType('Prophecy\Argument\Token\ExactValueToken'); - $token->getValue()->shouldBe(5); - } - - function it_scores_4_if_preset_token_does_not_match_the_argument($token) - { - $token->scoreArgument('argument')->willReturn(false); - $this->scoreArgument('argument')->shouldBe(4); - } - - function it_does_not_score_if_preset_token_matches_argument($token) - { - $token->scoreArgument('argument')->willReturn(5); - $this->scoreArgument('argument')->shouldBe(false); - } - - function it_is_last_if_preset_token_is_last($token) - { - $token->isLast()->willReturn(true); - $this->shouldBeLast(); - } - - function it_is_not_last_if_preset_token_is_not_last($token) - { - $token->isLast()->willReturn(false); - $this->shouldNotBeLast(); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php deleted file mode 100644 index a783a15f..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php +++ /dev/null @@ -1,101 +0,0 @@ -beConstructedWith('getName', 'stdClass'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - /** - * @param \ReflectionClass $reflection - */ - function it_scores_8_if_argument_object_has_specific_method_state($reflection) - { - $reflection->getName()->willReturn('stdClass'); - - $this->scoreArgument($reflection)->shouldReturn(8); - } - - /** - * @param \stdClass $class - */ - function it_scores_8_if_argument_object_has_specific_property_state($class) - { - $class->getName = 'stdClass'; - - $this->scoreArgument($class)->shouldReturn(8); - } - - function it_does_not_score_if_argument_method_state_does_not_match() - { - $value = new ObjectStateTokenFixtureB('ABC'); - $value2 = new ObjectStateTokenFixtureB('CBA'); - - $this->beConstructedWith('getSelf', $value); - $this->scoreArgument($value2)->shouldReturn(false); - } - - /** - * @param \stdClass $class - */ - function it_does_not_score_if_argument_property_state_does_not_match($class) - { - $class->getName = 'SplFileInfo'; - - $this->scoreArgument($class)->shouldReturn(false); - } - - /** - * @param \spec\Prophecy\Argument\Token\ObjectStateTokenFixtureA $class - */ - function it_does_not_score_if_argument_object_does_not_have_method_or_property($class) - { - $this->scoreArgument($class)->shouldReturn(false); - } - - function it_does_not_score_if_argument_is_not_object() - { - $this->scoreArgument(42)->shouldReturn(false); - } - - function it_has_simple_string_representation() - { - $this->__toString()->shouldReturn('state(getName(), "stdClass")'); - } -} - -class ObjectStateTokenFixtureA -{ - public $errors; -} - -class ObjectStateTokenFixtureB extends ObjectStateTokenFixtureA -{ - public $errors; - public $value = null; - - public function __construct($value) - { - $this->value = $value; - } - - public function getSelf() - { - return $this; - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/StringContainsTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/StringContainsTokenSpec.php deleted file mode 100644 index c7fd2652..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/StringContainsTokenSpec.php +++ /dev/null @@ -1,49 +0,0 @@ -beConstructedWith('a substring'); - } - - function it_is_initializable() - { - $this->shouldHaveType('Prophecy\Argument\Token\StringContainsToken'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_holds_value() - { - $this->getValue()->shouldReturn('a substring'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_6_if_the_argument_contains_the_value() - { - $this->scoreArgument('Argument containing a substring')->shouldReturn(6); - } - - function it_does_not_score_if_the_argument_does_not_contain_the_value() - { - $this->scoreArgument('Argument will not match')->shouldReturn(false); - } - - function its_string_representation_shows_substring() - { - $this->__toString()->shouldReturn('contains("a substring")'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/TypeTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/TypeTokenSpec.php deleted file mode 100644 index ae3e26e4..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/TypeTokenSpec.php +++ /dev/null @@ -1,62 +0,0 @@ -beConstructedWith('integer'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_5_if_argument_matches_simple_type() - { - $this->beConstructedWith('integer'); - - $this->scoreArgument(42)->shouldReturn(5); - } - - function it_does_not_scores_if_argument_does_not_match_simple_type() - { - $this->beConstructedWith('integer'); - - $this->scoreArgument(42.0)->shouldReturn(false); - } - - /** - * @param \ReflectionObject $object - */ - function it_scores_5_if_argument_is_an_instance_of_specified_class($object) - { - $this->beConstructedWith('ReflectionClass'); - - $this->scoreArgument($object)->shouldReturn(5); - } - - function it_has_simple_string_representation() - { - $this->__toString()->shouldReturn('type(integer)'); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $interface - */ - function it_scores_5_if_argument_is_an_instance_of_specified_interface($interface) - { - $this->beConstructedWith('Prophecy\Argument\Token\TokenInterface'); - - $this->scoreArgument($interface)->shouldReturn(5); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php deleted file mode 100644 index 64232a4d..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php +++ /dev/null @@ -1,107 +0,0 @@ -exact(42); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ExactValueToken'); - $token->getValue()->shouldReturn(42); - } - - function it_has_a_shortcut_for_any_argument_token() - { - $token = $this->any(); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\AnyValueToken'); - } - - function it_has_a_shortcut_for_multiple_arguments_token() - { - $token = $this->cetera(); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\AnyValuesToken'); - } - - function it_has_a_shortcut_for_type_token() - { - $token = $this->type('integer'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\TypeToken'); - } - - function it_has_a_shortcut_for_callback_token() - { - $token = $this->that('get_class'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\CallbackToken'); - } - - function it_has_a_shortcut_for_object_state_token() - { - $token = $this->which('getName', 'everzet'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ObjectStateToken'); - } - - function it_has_a_shortcut_for_logical_and_token() - { - $token = $this->allOf('integer', 5); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\LogicalAndToken'); - } - - function it_has_a_shortcut_for_array_count_token() - { - $token = $this->size(5); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayCountToken'); - } - - function it_has_a_shortcut_for_array_entry_token() - { - $token = $this->withEntry('key', 'value'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayEntryToken'); - } - - function it_has_a_shortcut_for_array_every_entry_token() - { - $token = $this->withEveryEntry('value'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayEveryEntryToken'); - } - - function it_has_a_shortcut_for_identical_value_token() - { - $token = $this->is('value'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\IdenticalValueToken'); - } - - function it_has_a_shortcut_for_array_entry_token_matching_any_key() - { - $token = $this->containing('value'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayEntryToken'); - $token->getKey()->shouldHaveType('Prophecy\Argument\Token\AnyValueToken'); - } - - function it_has_a_shortcut_for_array_entry_token_matching_any_value() - { - $token = $this->withKey('key'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayEntryToken'); - $token->getValue()->shouldHaveType('Prophecy\Argument\Token\AnyValueToken'); - } - - function it_has_a_shortcut_for_logical_not_token() - { - $token = $this->not('kagux'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\LogicalNotToken'); - } - - function it_has_a_shortcut_for_string_contains_token() - { - $token = $this->containingString('string'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\StringContainsToken'); - } - - function it_has_a_shortcut_for_approximate_token() - { - $token = $this->approximate(10); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ApproximateValueToken'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallCenterSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallCenterSpec.php deleted file mode 100644 index acf8d783..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallCenterSpec.php +++ /dev/null @@ -1,195 +0,0 @@ -scoreArguments(array(5, 2, 3))->willReturn(10); - $objectProphecy->getMethodProphecies()->willReturn(array()); - - $this->makeCall($objectProphecy, 'setValues', array(5, 2, 3)); - - $calls = $this->findCalls('setValues', $wildcard); - $calls->shouldHaveCount(1); - - $calls[0]->shouldBeAnInstanceOf('Prophecy\Call\Call'); - $calls[0]->getMethodName()->shouldReturn('setValues'); - $calls[0]->getArguments()->shouldReturn(array(5, 2, 3)); - $calls[0]->getReturnValue()->shouldReturn(null); - } - - function it_returns_null_for_any_call_through_makeCall_if_no_method_prophecies_added( - $objectProphecy - ) - { - $objectProphecy->getMethodProphecies()->willReturn(array()); - - $this->makeCall($objectProphecy, 'setValues', array(5, 2, 3))->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method1 - * @param \Prophecy\Prophecy\MethodProphecy $method2 - * @param \Prophecy\Prophecy\MethodProphecy $method3 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments1 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments2 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments3 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_executes_promise_of_method_prophecy_that_matches_signature_passed_to_makeCall( - $objectProphecy, $method1, $method2, $method3, $arguments1, $arguments2, $arguments3, - $promise - ) - { - $method1->getMethodName()->willReturn('getName'); - $method1->getArgumentsWildcard()->willReturn($arguments1); - $arguments1->scoreArguments(array('world', 'everything'))->willReturn(false); - - $method2->getMethodName()->willReturn('setTitle'); - $method2->getArgumentsWildcard()->willReturn($arguments2); - $arguments2->scoreArguments(array('world', 'everything'))->willReturn(false); - - $method3->getMethodName()->willReturn('getName'); - $method3->getArgumentsWildcard()->willReturn($arguments3); - $method3->getPromise()->willReturn($promise); - $arguments3->scoreArguments(array('world', 'everything'))->willReturn(200); - - $objectProphecy->getMethodProphecies()->willReturn(array( - 'method1' => array($method1), - 'method2' => array($method2, $method3) - )); - $objectProphecy->getMethodProphecies('getName')->willReturn(array($method1, $method3)); - $objectProphecy->reveal()->willReturn(new \stdClass()); - - $promise->execute(array('world', 'everything'), $objectProphecy->getWrappedObject(), $method3)->willReturn(42); - - $this->makeCall($objectProphecy, 'getName', array('world', 'everything'))->shouldReturn(42); - - $calls = $this->findCalls('getName', $arguments3); - $calls->shouldHaveCount(1); - $calls[0]->getReturnValue()->shouldReturn(42); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method1 - * @param \Prophecy\Prophecy\MethodProphecy $method2 - * @param \Prophecy\Prophecy\MethodProphecy $method3 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments1 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments2 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments3 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_executes_promise_of_method_prophecy_that_matches_with_highest_score_to_makeCall( - $objectProphecy, $method1, $method2, $method3, $arguments1, $arguments2, $arguments3, - $promise - ) - { - $method1->getMethodName()->willReturn('getName'); - $method1->getArgumentsWildcard()->willReturn($arguments1); - $arguments1->scoreArguments(array('world', 'everything'))->willReturn(50); - - $method2->getMethodName()->willReturn('getName'); - $method2->getArgumentsWildcard()->willReturn($arguments2); - $method2->getPromise()->willReturn($promise); - $arguments2->scoreArguments(array('world', 'everything'))->willReturn(300); - - $method3->getMethodName()->willReturn('getName'); - $method3->getArgumentsWildcard()->willReturn($arguments3); - $arguments3->scoreArguments(array('world', 'everything'))->willReturn(200); - - $objectProphecy->getMethodProphecies()->willReturn(array( - 'method1' => array($method1), - 'method2' => array($method2, $method3) - )); - $objectProphecy->getMethodProphecies('getName')->willReturn(array( - $method1, $method2, $method3 - )); - $objectProphecy->reveal()->willReturn(new \stdClass()); - - $promise->execute(array('world', 'everything'), $objectProphecy->getWrappedObject(), $method2) - ->willReturn('second'); - - $this->makeCall($objectProphecy, 'getName', array('world', 'everything')) - ->shouldReturn('second'); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_throws_exception_if_call_does_not_match_any_of_defined_method_prophecies( - $objectProphecy, $method, $arguments - ) - { - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $arguments->scoreArguments(array('world', 'everything'))->willReturn(false); - $arguments->__toString()->willReturn('arg1, arg2'); - - $objectProphecy->getMethodProphecies()->willReturn(array('method1' => array($method))); - $objectProphecy->getMethodProphecies('getName')->willReturn(array($method)); - - $this->shouldThrow('Prophecy\Exception\Call\UnexpectedCallException') - ->duringMakeCall($objectProphecy, 'getName', array('world', 'everything')); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_returns_null_if_method_prophecy_that_matches_makeCall_arguments_has_no_promise( - $objectProphecy, $method, $arguments - ) - { - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $method->getPromise()->willReturn(null); - $arguments->scoreArguments(array('world', 'everything'))->willReturn(100); - - $objectProphecy->getMethodProphecies()->willReturn(array($method)); - $objectProphecy->getMethodProphecies('getName')->willReturn(array($method)); - - $this->makeCall($objectProphecy, 'getName', array('world', 'everything')) - ->shouldReturn(null); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $wildcard - */ - function it_finds_recorded_calls_by_a_method_name_and_arguments_wildcard( - $objectProphecy, $wildcard - ) - { - $objectProphecy->getMethodProphecies()->willReturn(array()); - - $this->makeCall($objectProphecy, 'getName', array('world')); - $this->makeCall($objectProphecy, 'getName', array('everything')); - $this->makeCall($objectProphecy, 'setName', array(42)); - - $wildcard->scoreArguments(array('world'))->willReturn(false); - $wildcard->scoreArguments(array('everything'))->willReturn(10); - - $calls = $this->findCalls('getName', $wildcard); - - $calls->shouldHaveCount(1); - $calls[0]->getMethodName()->shouldReturn('getName'); - $calls[0]->getArguments()->shouldReturn(array('everything')); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallSpec.php deleted file mode 100644 index d1a85391..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallSpec.php +++ /dev/null @@ -1,54 +0,0 @@ -beConstructedWith('setValues', array(5, 2), 42, $exception, 'some_file.php', 23); - } - - function it_exposes_method_name_through_getter() - { - $this->getMethodName()->shouldReturn('setValues'); - } - - function it_exposes_arguments_through_getter() - { - $this->getArguments()->shouldReturn(array(5, 2)); - } - - function it_exposes_return_value_through_getter() - { - $this->getReturnValue()->shouldReturn(42); - } - - function it_exposes_exception_through_getter($exception) - { - $this->getException()->shouldReturn($exception); - } - - function it_exposes_file_and_line_through_getter() - { - $this->getFile()->shouldReturn('some_file.php'); - $this->getLine()->shouldReturn(23); - } - - function it_returns_shortpath_to_callPlace() - { - $this->getCallPlace()->shouldReturn('some_file.php:23'); - } - - function it_returns_unknown_as_callPlace_if_no_file_or_line_provided() - { - $this->beConstructedWith('setValues', array(), 0, null, null, null); - - $this->getCallPlace()->shouldReturn('unknown'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ClosureComparatorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ClosureComparatorSpec.php deleted file mode 100644 index c174e73c..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ClosureComparatorSpec.php +++ /dev/null @@ -1,39 +0,0 @@ -shouldHaveType('SebastianBergmann\Comparator\Comparator'); - } - - function it_accepts_only_closures() - { - $this->accepts(123, 321)->shouldReturn(false); - $this->accepts('string', 'string')->shouldReturn(false); - $this->accepts(false, true)->shouldReturn(false); - $this->accepts(true, false)->shouldReturn(false); - $this->accepts((object)array(), (object)array())->shouldReturn(false); - $this->accepts(function(){}, (object)array())->shouldReturn(false); - $this->accepts(function(){}, (object)array())->shouldReturn(false); - - $this->accepts(function(){}, function(){})->shouldReturn(true); - } - - function it_asserts_that_all_closures_are_different() - { - $this->shouldThrow()->duringAssertEquals(function(){}, function(){}); - } - - function it_asserts_that_all_closures_are_different_even_if_its_the_same_closure() - { - $closure = function(){}; - - $this->shouldThrow()->duringAssertEquals($closure, $closure); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/FactorySpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/FactorySpec.php deleted file mode 100644 index 6b13336d..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/FactorySpec.php +++ /dev/null @@ -1,20 +0,0 @@ -shouldHaveType('SebastianBergmann\Comparator\Factory'); - } - - function it_should_have_ClosureComparator_registered() - { - $comparator = $this->getInstance()->getComparatorFor(function(){}, function(){}); - $comparator->shouldHaveType('Prophecy\Comparator\ClosureComparator'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php deleted file mode 100644 index 06bf6f17..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php +++ /dev/null @@ -1,39 +0,0 @@ -shouldHaveType('SebastianBergmann\Comparator\ObjectComparator'); - } - - function it_accepts_only_prophecy_objects() - { - $this->accepts(123, 321)->shouldReturn(false); - $this->accepts('string', 'string')->shouldReturn(false); - $this->accepts(false, true)->shouldReturn(false); - $this->accepts(true, false)->shouldReturn(false); - $this->accepts((object)array(), (object)array())->shouldReturn(false); - $this->accepts(function(){}, (object)array())->shouldReturn(false); - $this->accepts(function(){}, function(){})->shouldReturn(false); - - $prophet = new Prophet(); - $prophecy = $prophet->prophesize('Prophecy\Prophecy\ObjectProphecy'); - - $this->accepts($prophecy, $prophecy)->shouldReturn(true); - } - - function it_asserts_that_an_object_is_equal_to_its_revealed_prophecy() - { - $prophet = new Prophet(); - $prophecy = $prophet->prophesize('Prophecy\Prophecy\ObjectProphecy'); - - $this->shouldNotThrow()->duringAssertEquals($prophecy->reveal(), $prophecy); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/DisableConstructorPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/DisableConstructorPatchSpec.php deleted file mode 100644 index 2d7d934d..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/DisableConstructorPatchSpec.php +++ /dev/null @@ -1,59 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_100() - { - $this->getPriority()->shouldReturn(100); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_anything($node) - { - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $arg1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $arg2 - */ - function it_makes_all_constructor_arguments_optional($class, $method, $arg1, $arg2) - { - $class->hasMethod('__construct')->willReturn(true); - $class->getMethod('__construct')->willReturn($method); - $method->getArguments()->willReturn(array($arg1, $arg2)); - - $arg1->setDefault(null)->shouldBeCalled(); - $arg2->setDefault(null)->shouldBeCalled(); - - $method->setCode(Argument::type('string'))->shouldBeCalled(); - - $this->apply($class); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_creates_new_constructor_if_object_has_none($class) - { - $class->hasMethod('__construct')->willReturn(false); - $class->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode')) - ->shouldBeCalled(); - - $this->apply($class); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/HhvmExceptionPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/HhvmExceptionPatchSpec.php deleted file mode 100644 index 8c348b86..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/HhvmExceptionPatchSpec.php +++ /dev/null @@ -1,37 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_minus_50() - { - $this->getPriority()->shouldReturn(-50); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - * @param \Prophecy\Doubler\Generator\Node\MethodNode $getterMethod - */ - function it_uses_parent_code_for_setTraceOptions($node, $method, $getterMethod) - { - $node->hasMethod('setTraceOptions')->willReturn(true); - $node->getMethod('setTraceOptions')->willReturn($method); - $node->hasMethod('getTraceOptions')->willReturn(true); - $node->getMethod('getTraceOptions')->willReturn($getterMethod); - - $method->useParentCode()->shouldBeCalled(); - $getterMethod->useParentCode()->shouldBeCalled(); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php deleted file mode 100644 index 200d9619..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php +++ /dev/null @@ -1,44 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_49() - { - $this->getPriority()->shouldReturn(49); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method3 - */ - function it_will_remove_echo_and_eval_methods($node, $method1, $method2, $method3) - { - $node->removeMethod('eval')->shouldBeCalled(); - $node->removeMethod('echo')->shouldBeCalled(); - - $method1->getName()->willReturn('echo'); - $method2->getName()->willReturn('eval'); - $method3->getName()->willReturn('notKeyword'); - - $node->getMethods()->willReturn(array( - 'echo' => $method1, - 'eval' => $method2, - 'notKeyword' => $method3, - )); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php deleted file mode 100644 index edd8b80d..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php +++ /dev/null @@ -1,125 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_anything($node) - { - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_discovers_api_using_phpdoc($node) - { - $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApi'); - - $node->addMethod(new MethodNode('undefinedMethod'))->shouldBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_ignores_existing_methods($node) - { - $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApiExtended'); - - $node->addMethod(new MethodNode('undefinedMethod'))->shouldBeCalled(); - $node->addMethod(new MethodNode('definedMethod'))->shouldNotBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_ignores_empty_methods_from_phpdoc($node) - { - $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApiInvalidMethodDefinition'); - - $node->addMethod(new MethodNode(''))->shouldNotBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_discovers_api_using_phpdoc_from_interface($node) - { - $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApiImplemented'); - - $node->addMethod(new MethodNode('implementedMethod'))->shouldBeCalled(); - - $this->apply($node); - } - - - function it_has_50_priority() - { - $this->getPriority()->shouldReturn(50); - } -} - -/** - * @method void undefinedMethod() - */ -class MagicalApi -{ - /** - * @return void - */ - public function definedMethod() - { - - } -} - -/** - * @method void invalidMethodDefinition - * @method void - * @method - */ -class MagicalApiInvalidMethodDefinition -{ -} - -/** - * @method void undefinedMethod() - * @method void definedMethod() - */ -class MagicalApiExtended extends MagicalApi -{ - -} - -/** - */ -class MagicalApiImplemented implements MagicalApiInterface -{ - -} - -/** - * @method void implementedMethod() - */ -interface MagicalApiInterface -{ - -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ProphecySubjectPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ProphecySubjectPatchSpec.php deleted file mode 100644 index c460814c..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ProphecySubjectPatchSpec.php +++ /dev/null @@ -1,83 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function it_has_priority_of_0() - { - $this->getPriority()->shouldReturn(0); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_any_class($node) - { - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_forces_class_to_implement_ProphecySubjectInterface($node) - { - $node->addInterface('Prophecy\Prophecy\ProphecySubjectInterface')->shouldBeCalled(); - - $node->addProperty('objectProphecy', 'private')->willReturn(null); - $node->getMethods()->willReturn(array()); - $node->hasMethod(Argument::any())->willReturn(false); - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $constructor - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method3 - */ - function it_forces_all_class_methods_except_constructor_to_proxy_calls_into_prophecy_makeCall( - $node, $constructor, $method1, $method2, $method3 - ) - { - $node->addInterface('Prophecy\Prophecy\ProphecySubjectInterface')->willReturn(null); - $node->addProperty('objectProphecy', 'private')->willReturn(null); - $node->hasMethod(Argument::any())->willReturn(false); - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - - $constructor->getName()->willReturn('__construct'); - $method1->getName()->willReturn('method1'); - $method2->getName()->willReturn('method2'); - $method3->getName()->willReturn('method3'); - - $node->getMethods()->willReturn(array( - 'method1' => $method1, - 'method2' => $method2, - 'method3' => $method3, - )); - - $constructor->setCode(Argument::any())->shouldNotBeCalled(); - - $method1->setCode('return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());') - ->shouldBeCalled(); - $method2->setCode('return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());') - ->shouldBeCalled(); - $method3->setCode('return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());') - ->shouldBeCalled(); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatchSpec.php deleted file mode 100644 index 4116e4df..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatchSpec.php +++ /dev/null @@ -1,47 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_50() - { - $this->getPriority()->shouldReturn(50); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $reflectionClassNode - * @param \Prophecy\Doubler\Generator\Node\ClassNode $anotherClassNode - */ - function it_supports_ReflectionClass_only($reflectionClassNode, $anotherClassNode) - { - $reflectionClassNode->getParentClass()->willReturn('ReflectionClass'); - $anotherClassNode->getParentClass()->willReturn('stdClass'); - - $this->supports($reflectionClassNode)->shouldReturn(true); - $this->supports($anotherClassNode)->shouldReturn(false); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $arg1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $arg2 - */ - function it_makes_all_newInstance_arguments_optional($class, $method, $arg1, $arg2) - { - $class->getMethod('newInstance')->willReturn($method); - $method->getArguments()->willReturn(array($arg1)); - $arg1->setDefault(null)->shouldBeCalled(); - - $this->apply($class); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php deleted file mode 100644 index 42e854ac..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php +++ /dev/null @@ -1,107 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_50() - { - $this->getPriority()->shouldReturn(50); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_does_not_support_nodes_without_parent_class($node) - { - $node->getParentClass()->willReturn('stdClass'); - $this->supports($node)->shouldReturn(false); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_nodes_with_SplFileInfo_as_parent_class($node) - { - $node->getParentClass()->willReturn('SplFileInfo'); - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_nodes_with_derivative_of_SplFileInfo_as_parent_class($node) - { - $node->getParentClass()->willReturn('SplFileInfo'); - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_adds_a_method_to_node_if_not_exists($node) - { - $node->hasMethod('__construct')->willReturn(false); - $node->addMethod(Argument::any())->shouldBeCalled(); - $node->getParentClass()->shouldBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function it_updates_existing_method_if_found($node, $method) - { - $node->hasMethod('__construct')->willReturn(true); - $node->getMethod('__construct')->willReturn($method); - $node->getParentClass()->shouldBeCalled(); - - $method->useParentCode()->shouldBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function it_should_not_supply_a_file_for_a_directory_iterator($node, $method) - { - $node->hasMethod('__construct')->willReturn(true); - $node->getMethod('__construct')->willReturn($method); - $node->getParentClass()->willReturn('DirectoryIterator'); - - $method->setCode(Argument::that(function($value) { - return strpos($value, '.php') === false; - }))->shouldBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function it_should_supply_a_file_for_a_spl_file_object($node, $method) - { - $node->hasMethod('__construct')->willReturn(true); - $node->getMethod('__construct')->willReturn($method); - $node->getParentClass()->willReturn('SplFileObject'); - - $method->setCode(Argument::that(function($value) { - return strpos($value, '.php') !== false; - }))->shouldBeCalled(); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/TraversablePatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/TraversablePatchSpec.php deleted file mode 100644 index 2279b720..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/TraversablePatchSpec.php +++ /dev/null @@ -1,61 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_class_that_implements_only_Traversable($node) - { - $node->getInterfaces()->willReturn(array('Traversable')); - - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_does_not_support_class_that_implements_Iterator($node) - { - $node->getInterfaces()->willReturn(array('Traversable', 'Iterator')); - - $this->supports($node)->shouldReturn(false); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_does_not_support_class_that_implements_IteratorAggregate($node) - { - $node->getInterfaces()->willReturn(array('Traversable', 'IteratorAggregate')); - - $this->supports($node)->shouldReturn(false); - } - - function it_has_100_priority() - { - $this->getPriority()->shouldReturn(100); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_forces_node_to_implement_IteratorAggregate($node) - { - $node->addInterface('Iterator')->shouldBeCalled(); - - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/DoublerSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/DoublerSpec.php deleted file mode 100644 index a39fa87f..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/DoublerSpec.php +++ /dev/null @@ -1,122 +0,0 @@ -beConstructedWith($mirror, $creator, $namer); - } - - function it_does_not_have_patches_by_default() - { - $this->getClassPatches()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $patch - */ - function its_registerClassPatch_adds_a_patch_to_the_doubler($patch) - { - $this->registerClassPatch($patch); - $this->getClassPatches()->shouldReturn(array($patch)); - } - - /** - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt1 - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt2 - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt3 - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt4 - */ - function its_getClassPatches_sorts_patches_by_priority($alt1, $alt2, $alt3, $alt4) - { - $alt1->getPriority()->willReturn(2); - $alt2->getPriority()->willReturn(50); - $alt3->getPriority()->willReturn(10); - $alt4->getPriority()->willReturn(0); - - $this->registerClassPatch($alt1); - $this->registerClassPatch($alt2); - $this->registerClassPatch($alt3); - $this->registerClassPatch($alt4); - - $this->getClassPatches()->shouldReturn(array($alt2, $alt3, $alt1, $alt4)); - } - - /** - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt1 - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt2 - * @param \ReflectionClass $class - * @param \ReflectionClass $interface1 - * @param \ReflectionClass $interface2 - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function its_double_mirrors_alterates_and_instantiates_provided_class( - $mirror, $creator, $namer, $alt1, $alt2, $class, $interface1, $interface2, $node - ) - { - $mirror->reflect($class, array($interface1, $interface2))->willReturn($node); - $alt1->supports($node)->willReturn(true); - $alt2->supports($node)->willReturn(false); - $alt1->getPriority()->willReturn(1); - $alt2->getPriority()->willReturn(2); - $namer->name($class, array($interface1, $interface2))->willReturn('SplStack'); - $class->getName()->willReturn('stdClass'); - $interface1->getName()->willReturn('ArrayAccess'); - $interface2->getName()->willReturn('Iterator'); - - $alt1->apply($node)->shouldBeCalled(); - $alt2->apply($node)->shouldNotBeCalled(); - $creator->create('SplStack', $node)->shouldBeCalled(); - - $this->registerClassPatch($alt1); - $this->registerClassPatch($alt2); - - $this->double($class, array($interface1, $interface2)) - ->shouldReturnAnInstanceOf('SplStack'); - } - - /** - * @param \ReflectionClass $class - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_double_instantiates_a_class_with_constructor_argument($mirror, $class, $node, $namer) - { - $class->getName()->willReturn('ReflectionClass'); - $mirror->reflect($class, array())->willReturn($node); - $namer->name($class, array())->willReturn('ReflectionClass'); - - $double = $this->double($class, array(), array('stdClass')); - $double->shouldBeAnInstanceOf('ReflectionClass'); - $double->getName()->shouldReturn('stdClass'); - } - - /** - * @param \ReflectionClass $class - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_can_instantiate_class_with_final_constructor($mirror, $class, $node, $namer) - { - $class->getName()->willReturn('spec\Prophecy\Doubler\WithFinalConstructor'); - $mirror->reflect($class, array())->willReturn($node); - $namer->name($class, array())->willReturn('spec\Prophecy\Doubler\WithFinalConstructor'); - - $double = $this->double($class, array()); - - $double->shouldBeAnInstanceOf('spec\Prophecy\Doubler\WithFinalConstructor'); - } -} - -class WithFinalConstructor -{ - final public function __construct() {} -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php deleted file mode 100644 index b0830482..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php +++ /dev/null @@ -1,323 +0,0 @@ -getParentClass()->willReturn('RuntimeException'); - $class->getInterfaces()->willReturn(array( - 'Prophecy\Doubler\Generator\MirroredInterface', 'ArrayAccess', 'ArrayIterator' - )); - $class->getProperties()->willReturn(array('name' => 'public', 'email' => 'private')); - $class->getMethods()->willReturn(array($method1, $method2, $method3)); - - $method1->getName()->willReturn('getName'); - $method1->getVisibility()->willReturn('public'); - $method1->returnsReference()->willReturn(false); - $method1->isStatic()->willReturn(true); - $method1->getArguments()->willReturn(array($argument11, $argument12)); - $method1->hasReturnType()->willReturn(true); - $method1->getReturnType()->willReturn('string'); - $method1->getCode()->willReturn('return $this->name;'); - - $method2->getName()->willReturn('getEmail'); - $method2->getVisibility()->willReturn('protected'); - $method2->returnsReference()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method2->getArguments()->willReturn(array($argument21)); - $method2->hasReturnType()->willReturn(false); - $method2->getCode()->willReturn('return $this->email;'); - - $method3->getName()->willReturn('getRefValue'); - $method3->getVisibility()->willReturn('public'); - $method3->returnsReference()->willReturn(true); - $method3->isStatic()->willReturn(false); - $method3->getArguments()->willReturn(array($argument31)); - $method3->hasReturnType()->willReturn(false); - $method3->getCode()->willReturn('return $this->refValue;'); - - $argument11->getName()->willReturn('fullname'); - $argument11->getTypeHint()->willReturn('array'); - $argument11->isOptional()->willReturn(true); - $argument11->getDefault()->willReturn(null); - $argument11->isPassedByReference()->willReturn(false); - $argument11->isVariadic()->willReturn(false); - - $argument12->getName()->willReturn('class'); - $argument12->getTypeHint()->willReturn('ReflectionClass'); - $argument12->isOptional()->willReturn(false); - $argument12->isPassedByReference()->willReturn(false); - $argument12->isVariadic()->willReturn(false); - - $argument21->getName()->willReturn('default'); - $argument21->getTypeHint()->willReturn('string'); - $argument21->isOptional()->willReturn(true); - $argument21->getDefault()->willReturn('ever.zet@gmail.com'); - $argument21->isPassedByReference()->willReturn(false); - $argument21->isVariadic()->willReturn(false); - - $argument31->getName()->willReturn('refValue'); - $argument31->getTypeHint()->willReturn(null); - $argument31->isOptional()->willReturn(false); - $argument31->getDefault()->willReturn(); - $argument31->isPassedByReference()->willReturn(false); - $argument31->isVariadic()->willReturn(false); - - $code = $this->generate('CustomClass', $class); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $expected = <<<'PHP' -namespace { -class CustomClass extends \RuntimeException implements \Prophecy\Doubler\Generator\MirroredInterface, \ArrayAccess, \ArrayIterator { -public $name; -private $email; - -public static function getName(array $fullname = NULL, \ReflectionClass $class): string { -return $this->name; -} -protected function getEmail(string $default = 'ever.zet@gmail.com') { -return $this->email; -} -public function &getRefValue( $refValue) { -return $this->refValue; -} - -} -} -PHP; - } else { - $expected = <<<'PHP' -namespace { -class CustomClass extends \RuntimeException implements \Prophecy\Doubler\Generator\MirroredInterface, \ArrayAccess, \ArrayIterator { -public $name; -private $email; - -public static function getName(array $fullname = NULL, \ReflectionClass $class) { -return $this->name; -} -protected function getEmail(\string $default = 'ever.zet@gmail.com') { -return $this->email; -} -public function &getRefValue( $refValue) { -return $this->refValue; -} - -} -} -PHP; - } - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method3 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method4 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument2 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument3 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument4 - */ - function it_generates_proper_php_code_for_variadics( - $class, $method1, $method2, $method3, $method4, $argument1, $argument2, - $argument3, $argument4 - ) - { - $class->getParentClass()->willReturn('stdClass'); - $class->getInterfaces()->willReturn(array('Prophecy\Doubler\Generator\MirroredInterface')); - $class->getProperties()->willReturn(array()); - $class->getMethods()->willReturn(array( - $method1, $method2, $method3, $method4 - )); - - $method1->getName()->willReturn('variadic'); - $method1->getVisibility()->willReturn('public'); - $method1->returnsReference()->willReturn(false); - $method1->isStatic()->willReturn(false); - $method1->getArguments()->willReturn(array($argument1)); - $method1->hasReturnType()->willReturn(false); - $method1->getCode()->willReturn(''); - - $method2->getName()->willReturn('variadicByRef'); - $method2->getVisibility()->willReturn('public'); - $method2->returnsReference()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method2->getArguments()->willReturn(array($argument2)); - $method2->hasReturnType()->willReturn(false); - $method2->getCode()->willReturn(''); - - $method3->getName()->willReturn('variadicWithType'); - $method3->getVisibility()->willReturn('public'); - $method3->returnsReference()->willReturn(false); - $method3->isStatic()->willReturn(false); - $method3->getArguments()->willReturn(array($argument3)); - $method3->hasReturnType()->willReturn(false); - $method3->getCode()->willReturn(''); - - $method4->getName()->willReturn('variadicWithTypeByRef'); - $method4->getVisibility()->willReturn('public'); - $method4->returnsReference()->willReturn(false); - $method4->isStatic()->willReturn(false); - $method4->getArguments()->willReturn(array($argument4)); - $method4->hasReturnType()->willReturn(false); - $method4->getCode()->willReturn(''); - - $argument1->getName()->willReturn('args'); - $argument1->getTypeHint()->willReturn(null); - $argument1->isOptional()->willReturn(false); - $argument1->isPassedByReference()->willReturn(false); - $argument1->isVariadic()->willReturn(true); - - $argument2->getName()->willReturn('args'); - $argument2->getTypeHint()->willReturn(null); - $argument2->isOptional()->willReturn(false); - $argument2->isPassedByReference()->willReturn(true); - $argument2->isVariadic()->willReturn(true); - - $argument3->getName()->willReturn('args'); - $argument3->getTypeHint()->willReturn('\ReflectionClass'); - $argument3->isOptional()->willReturn(false); - $argument3->isPassedByReference()->willReturn(false); - $argument3->isVariadic()->willReturn(true); - - $argument4->getName()->willReturn('args'); - $argument4->getTypeHint()->willReturn('\ReflectionClass'); - $argument4->isOptional()->willReturn(false); - $argument4->isPassedByReference()->willReturn(true); - $argument4->isVariadic()->willReturn(true); - - $code = $this->generate('CustomClass', $class); - $expected = <<<'PHP' -namespace { -class CustomClass extends \stdClass implements \Prophecy\Doubler\Generator\MirroredInterface { - -public function variadic( ...$args) { - -} -public function variadicByRef( &...$args) { - -} -public function variadicWithType(\\ReflectionClass ...$args) { - -} -public function variadicWithTypeByRef(\\ReflectionClass &...$args) { - -} - -} -} -PHP; - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument - */ - function it_overrides_properly_methods_with_args_passed_by_reference( - $class, $method, $argument - ) - { - $class->getParentClass()->willReturn('RuntimeException'); - $class->getInterfaces()->willReturn(array('Prophecy\Doubler\Generator\MirroredInterface')); - $class->getProperties()->willReturn(array()); - $class->getMethods()->willReturn(array($method)); - - $method->getName()->willReturn('getName'); - $method->getVisibility()->willReturn('public'); - $method->isStatic()->willReturn(false); - $method->getArguments()->willReturn(array($argument)); - $method->hasReturnType()->willReturn(false); - $method->returnsReference()->willReturn(false); - $method->getCode()->willReturn('return $this->name;'); - - $argument->getName()->willReturn('fullname'); - $argument->getTypeHint()->willReturn('array'); - $argument->isOptional()->willReturn(true); - $argument->getDefault()->willReturn(null); - $argument->isPassedByReference()->willReturn(true); - $argument->isVariadic()->willReturn(false); - - $code = $this->generate('CustomClass', $class); - $expected =<<<'PHP' -namespace { -class CustomClass extends \RuntimeException implements \Prophecy\Doubler\Generator\MirroredInterface { - -public function getName(array &$fullname = NULL) { -return $this->name; -} - -} -} -PHP; - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_generates_empty_class_for_empty_ClassNode($class) - { - $class->getParentClass()->willReturn('stdClass'); - $class->getInterfaces()->willReturn(array('Prophecy\Doubler\Generator\MirroredInterface')); - $class->getProperties()->willReturn(array()); - $class->getMethods()->willReturn(array()); - - $code = $this->generate('CustomClass', $class); - $expected =<<<'PHP' -namespace { -class CustomClass extends \stdClass implements \Prophecy\Doubler\Generator\MirroredInterface { - - -} -} -PHP; - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_wraps_class_in_namespace_if_it_is_namespaced($class) - { - $class->getParentClass()->willReturn('stdClass'); - $class->getInterfaces()->willReturn(array('Prophecy\Doubler\Generator\MirroredInterface')); - $class->getProperties()->willReturn(array()); - $class->getMethods()->willReturn(array()); - - $code = $this->generate('My\Awesome\CustomClass', $class); - $expected =<<<'PHP' -namespace My\Awesome { -class CustomClass extends \stdClass implements \Prophecy\Doubler\Generator\MirroredInterface { - - -} -} -PHP; - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCreatorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCreatorSpec.php deleted file mode 100644 index c7b57009..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCreatorSpec.php +++ /dev/null @@ -1,44 +0,0 @@ -beConstructedWith($generator); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_evaluates_code_generated_by_ClassCodeGenerator($generator, $class) - { - $generator->generate('stdClass', $class)->shouldBeCalled()->willReturn( - 'return 42;' - ); - - $this->create('stdClass', $class)->shouldReturn(42); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_throws_an_exception_if_class_does_not_exist_after_evaluation($generator, $class) - { - $generator->generate('CustomClass', $class)->shouldBeCalled()->willReturn( - 'return 42;' - ); - - $class->getParentClass()->willReturn('stdClass'); - $class->getInterfaces()->willReturn(array('Interface1', 'Interface2')); - - $this->shouldThrow('Prophecy\Exception\Doubler\ClassCreatorException') - ->duringCreate('CustomClass', $class); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php deleted file mode 100644 index de804480..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php +++ /dev/null @@ -1,784 +0,0 @@ -getName()->willReturn('Custom\ClassName'); - $class->getParentClass()->willReturn($parent); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array( - $method1, $method2, $method3 - )); - - $parent->getName()->willReturn('Custom\ParentClassName'); - - $method1->getDeclaringClass()->willReturn($class); - $method2->getDeclaringClass()->willReturn($class); - $method3->getDeclaringClass()->willReturn($class); - - $method1->getName()->willReturn('getName'); - $method2->getName()->willReturn('getSelf'); - $method3->getName()->willReturn('getParent'); - - $method1->isFinal()->willReturn(false); - $method2->isFinal()->willReturn(false); - $method3->isFinal()->willReturn(false); - - $method1->isProtected()->willReturn(false); - $method2->isProtected()->willReturn(false); - $method3->isProtected()->willReturn(false); - - $method1->isStatic()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method3->isStatic()->willReturn(false); - - $method1->returnsReference()->willReturn(false); - $method2->returnsReference()->willReturn(false); - $method3->returnsReference()->willReturn(false); - - $method1->getParameters()->willReturn(array()); - $method2->getParameters()->willReturn(array()); - $method3->getParameters()->willReturn(array()); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method1->hasReturnType()->willReturn(true); - $method1->getReturnType()->willReturn('string'); - $method2->hasReturnType()->willReturn(true); - $method2->getReturnType()->willReturn('self'); - $method3->hasReturnType()->willReturn(true); - $method3->getReturnType()->willReturn('parent'); - } - - $classNode = $this->reflect($class, array()); - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('Custom\ClassName'); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(3); - - $classNode->hasMethod('getName')->shouldReturn(true); - $classNode->hasMethod('getSelf')->shouldReturn(true); - $classNode->hasMethod('getParent')->shouldReturn(true); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $classNode->getMethod('getName')->getReturnType()->shouldReturn('string'); - $classNode->getMethod('getSelf')->getReturnType()->shouldReturn('\Custom\ClassName'); - $classNode->getMethod('getParent')->getReturnType()->shouldReturn('\Custom\ParentClassName'); - } - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - * @param ReflectionParameter $parameter - */ - function it_changes_argument_names_if_they_are_varying($class, $method, $parameter) - { - - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - - $method->getParameters()->willReturn(array($parameter)); - $method->getName()->willReturn('methodName'); - $method->isFinal()->willReturn(false); - $method->isProtected()->willReturn(false); - $method->isStatic()->willReturn(false); - $method->returnsReference()->willReturn(false); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $parameter->getName()->willReturn('...'); - $parameter->isDefaultValueAvailable()->willReturn(true); - $parameter->getDefaultValue()->willReturn(null); - $parameter->isPassedByReference()->willReturn(false); - $parameter->getClass()->willReturn($class); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $parameter->isVariadic()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - - $methodNodes = $classNode->getMethods(); - - $argumentNodes = $methodNodes['methodName']->getArguments(); - $argumentNode = $argumentNodes[0]; - - $argumentNode->getName()->shouldReturn('__dot_dot_dot__'); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_reflects_protected_abstract_methods($class, $method) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array($method)); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array()); - - $method->isProtected()->willReturn(true); - $method->isStatic()->willReturn(false); - $method->getParameters()->willReturn(array()); - $method->getName()->willReturn('innerDetail'); - $method->returnsReference()->willReturn(false); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('Custom\ClassName'); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(1); - - $methodNodes['innerDetail']->getVisibility()->shouldReturn('protected'); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_reflects_public_static_methods($class, $method) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array($method)); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array()); - - $method->isProtected()->willReturn(true); - $method->isStatic()->willReturn(true); - $method->getParameters()->willReturn(array()); - $method->getName()->willReturn('innerDetail'); - $method->returnsReference()->willReturn(false); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('Custom\ClassName'); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(1); - - $methodNodes['innerDetail']->getVisibility()->shouldReturn('protected'); - $methodNodes['innerDetail']->isStatic()->shouldReturn(true); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $constructMethod - * @param ReflectionMethod $destructMethod - * @param ReflectionMethod $sleepMethod - * @param ReflectionMethod $wakeupMethod - * @param ReflectionMethod $toStringMethod - * @param ReflectionMethod $callMethod - * @param ReflectionMethod $invokeMethod - */ - function it_reflects_allowed_magic_methods($class, $constructMethod, $destructMethod, $sleepMethod, $wakeupMethod, $toStringMethod, $callMethod, $invokeMethod) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array( - $constructMethod, $destructMethod, $sleepMethod, $wakeupMethod, $toStringMethod, $callMethod, $invokeMethod - )); - - $constructMethod->getName()->willReturn('__construct'); - $destructMethod->getName()->willReturn('__destruct'); - $sleepMethod->getName()->willReturn('__sleep'); - $wakeupMethod->getName()->willReturn('__wakeup'); - $toStringMethod->getName()->willReturn('__toString'); - $callMethod->getName()->willReturn('__call'); - $invokeMethod->getName()->willReturn('__invoke'); - - $constructMethod->isFinal()->willReturn(false); - $destructMethod->isFinal()->willReturn(false); - $sleepMethod->isFinal()->willReturn(false); - $wakeupMethod->isFinal()->willReturn(false); - $toStringMethod->isFinal()->willReturn(false); - $callMethod->isFinal()->willReturn(false); - $invokeMethod->isFinal()->willReturn(false); - - $constructMethod->isProtected()->willReturn(false); - $destructMethod->isProtected()->willReturn(false); - $sleepMethod->isProtected()->willReturn(false); - $wakeupMethod->isProtected()->willReturn(false); - $toStringMethod->isProtected()->willReturn(false); - $callMethod->isProtected()->willReturn(false); - $invokeMethod->isProtected()->willReturn(false); - - $constructMethod->isStatic()->willReturn(false); - $destructMethod->isStatic()->willReturn(false); - $sleepMethod->isStatic()->willReturn(false); - $wakeupMethod->isStatic()->willReturn(false); - $toStringMethod->isStatic()->willReturn(false); - $callMethod->isStatic()->willReturn(false); - $invokeMethod->isStatic()->willReturn(false); - - $constructMethod->returnsReference()->willReturn(false); - $destructMethod->returnsReference()->willReturn(false); - $sleepMethod->returnsReference()->willReturn(false); - $wakeupMethod->returnsReference()->willReturn(false); - $toStringMethod->returnsReference()->willReturn(false); - $callMethod->returnsReference()->willReturn(false); - $invokeMethod->returnsReference()->willReturn(false); - - $constructMethod->getParameters()->willReturn(array()); - $destructMethod->getParameters()->willReturn(array()); - $sleepMethod->getParameters()->willReturn(array()); - $wakeupMethod->getParameters()->willReturn(array()); - $toStringMethod->getParameters()->willReturn(array()); - $callMethod->getParameters()->willReturn(array()); - $invokeMethod->getParameters()->willReturn(array()); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $constructMethod->hasReturnType()->willReturn(false); - $destructMethod->hasReturnType()->willReturn(false); - $sleepMethod->hasReturnType()->willReturn(false); - $wakeupMethod->hasReturnType()->willReturn(false); - $toStringMethod->hasReturnType()->willReturn(false); - $callMethod->hasReturnType()->willReturn(false); - $invokeMethod->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('Custom\ClassName'); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(7); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - * @param ReflectionParameter $param1 - * @param ReflectionParameter $param2 - * @param ReflectionClass $typeHint - * @param ReflectionParameter $param3 - * @param ReflectionParameter $param4 - */ - function it_properly_reads_methods_arguments_with_types( - $class, $method, $param1, $param2, $typeHint, $param3, $param4 - ) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->getName()->willReturn('methodWithArgs'); - $method->isFinal()->willReturn(false); - $method->isProtected()->willReturn(true); - $method->isStatic()->willReturn(false); - $method->returnsReference()->willReturn(false); - $method->getParameters()->willReturn(array($param1, $param2, $param3, $param4)); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $param1->getName()->willReturn('arg_1'); - $param1->isArray()->willReturn(true); - $param1->getClass()->willReturn(null); - $param1->isDefaultValueAvailable()->willReturn(true); - $param1->isPassedByReference()->willReturn(false); - $param1->allowsNull()->willReturn(false); - $param1->getDefaultValue()->willReturn(array()); - - $param2->getName()->willReturn('arg2'); - $param2->isArray()->willReturn(false); - $param2->getClass()->willReturn($typeHint); - $param2->isDefaultValueAvailable()->willReturn(false); - $param2->isOptional()->willReturn(false); - $param2->isPassedByReference()->willReturn(false); - $param2->allowsNull()->willReturn(false); - $typeHint->getName()->willReturn('ArrayAccess'); - - $param3->getName()->willReturn('arg_3'); - $param3->isArray()->willReturn(false); - if (version_compare(PHP_VERSION, '5.4', '>=')) { - $param3->isCallable()->willReturn(true); - } - $param3->getClass()->willReturn(null); - $param3->isOptional()->willReturn(false); - $param3->isDefaultValueAvailable()->willReturn(false); - $param3->isPassedByReference()->willReturn(false); - $param3->allowsNull()->willReturn(true); - - $param4->getName()->willReturn('arg_4'); - $param4->isArray()->willReturn(false); - $param4->getClass()->willReturn($typeHint); - $param4->isPassedByReference()->willReturn(false); - $param4->allowsNull()->willReturn(true); - - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param1->isVariadic()->willReturn(false); - $param2->isVariadic()->willReturn(false); - $param3->isVariadic()->willReturn(false); - $param4->isVariadic()->willReturn(true); - } else { - $param4->isOptional()->willReturn(true); - $param4->isDefaultValueAvailable()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $methodNodes = $classNode->getMethods(); - $argNodes = $methodNodes['methodWithArgs']->getArguments(); - - $argNodes[0]->getName()->shouldReturn('arg_1'); - $argNodes[0]->getTypeHint()->shouldReturn('array'); - $argNodes[0]->isOptional()->shouldReturn(true); - $argNodes[0]->getDefault()->shouldReturn(array()); - - $argNodes[1]->getName()->shouldReturn('arg2'); - $argNodes[1]->getTypeHint()->shouldReturn('ArrayAccess'); - $argNodes[1]->isOptional()->shouldReturn(false); - - $argNodes[2]->getName()->shouldReturn('arg_3'); - if (version_compare(PHP_VERSION, '5.4', '>=')) { - $argNodes[2]->getTypeHint()->shouldReturn('callable'); - $argNodes[2]->isOptional()->shouldReturn(true); - $argNodes[2]->getDefault()->shouldReturn(null); - } else { - $argNodes[2]->isOptional()->shouldReturn(false); - } - - $argNodes[3]->getName()->shouldReturn('arg_4'); - $argNodes[3]->getTypeHint()->shouldReturn('ArrayAccess'); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $argNodes[3]->isVariadic()->shouldReturn(true); - } else { - $argNodes[3]->isOptional()->shouldReturn(true); - $argNodes[3]->getDefault()->shouldReturn(null); - } - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - * @param ReflectionParameter $param1 - */ - function it_marks_required_args_without_types_as_not_optional( - $class, $method, $param1 - ) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->getName()->willReturn('methodWithArgs'); - $method->isFinal()->willReturn(false); - $method->isProtected()->willReturn(false); - $method->isStatic()->willReturn(false); - $method->returnsReference()->willReturn(false); - $method->getParameters()->willReturn(array($param1)); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $param1->getName()->willReturn('arg_1'); - $param1->isArray()->willReturn(false); - if (version_compare(PHP_VERSION, '5.4', '>=')) { - $param1->isCallable()->willReturn(false); - } - $param1->getClass()->willReturn(null); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $param1->hasType()->willReturn(false); - } - - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param1->isVariadic()->willReturn(false); - } - $param1->isDefaultValueAvailable()->willReturn(false); - $param1->isOptional()->willReturn(false); - $param1->isPassedByReference()->willReturn(false); - $param1->allowsNull()->willReturn(true); - if (defined('HHVM_VERSION')) { - $param1->getTypehintText()->willReturn(null); - } - - $classNode = $this->reflect($class, array()); - $methodNodes = $classNode->getMethods(); - $argNodes = $methodNodes['methodWithArgs']->getArguments(); - - $argNodes[0]->isOptional()->shouldReturn(false); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - * @param ReflectionParameter $param1 - * @param ReflectionParameter $param2 - * @param ReflectionParameter $param3 - * @param ReflectionClass $typeHint - */ - function it_marks_passed_by_reference_args_as_passed_by_reference( - $class, $method, $param1, $param2, $param3, $typeHint - ) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->getName()->willReturn('methodWithArgs'); - $method->isFinal()->willReturn(false); - $method->isProtected()->willReturn(false); - $method->isStatic()->willReturn(false); - $method->returnsReference()->willReturn(false); - $method->getParameters()->willReturn(array($param1, $param2, $param3)); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $param1->getName()->willReturn('arg_1'); - $param1->isArray()->willReturn(false); - if (version_compare(PHP_VERSION, '5.4', '>=')) { - $param1->isCallable()->willReturn(false); - } - $param1->getClass()->willReturn(null); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param1->isVariadic()->willReturn(false); - } - $param1->isDefaultValueAvailable()->willReturn(false); - $param1->isOptional()->willReturn(true); - $param1->isPassedByReference()->willReturn(true); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $param1->hasType()->willReturn(false); - } - - $param1->allowsNull()->willReturn(false); - if (defined('HHVM_VERSION')) { - $param1->getTypehintText()->willReturn(null); - } - - $param2->getName()->willReturn('arg2'); - $param2->isArray()->willReturn(false); - $param2->getClass()->willReturn($typeHint); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param2->isVariadic()->willReturn(false); - } - $param2->isDefaultValueAvailable()->willReturn(false); - $param2->isOptional()->willReturn(false); - $param2->isPassedByReference()->willReturn(false); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $param2->hasType()->willReturn(false); - } - - $param2->allowsNull()->willReturn(false); - $typeHint->getName()->willReturn('ArrayAccess'); - - $param3->getName()->willReturn('arg2'); - $param3->isArray()->willReturn(false); - $param3->getClass()->willReturn($typeHint); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param3->isVariadic()->willReturn(true); - } else { - $param3->isOptional()->willReturn(true); - $param3->isDefaultValueAvailable()->willReturn(false); - } - $param3->isPassedByReference()->willReturn(true); - $param3->allowsNull()->willReturn(true); - - $classNode = $this->reflect($class, array()); - $methodNodes = $classNode->getMethods(); - $argNodes = $methodNodes['methodWithArgs']->getArguments(); - - $argNodes[0]->isPassedByReference()->shouldReturn(true); - $argNodes[1]->isPassedByReference()->shouldReturn(false); - $argNodes[2]->isPassedByReference()->shouldReturn(true); - } - - /** - * @param ReflectionClass $class - */ - function it_throws_an_exception_if_class_is_final($class) - { - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(true); - $class->getName()->willReturn('Custom\ClassName'); - - $this->shouldThrow('Prophecy\Exception\Doubler\ClassMirrorException') - ->duringReflect($class, array()); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_ignores_final_methods($class, $method) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->isFinal()->willReturn(true); - $method->getName()->willReturn('finalImplementation'); - - $classNode = $this->reflect($class, array()); - $classNode->getMethods()->shouldHaveCount(0); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_marks_final_methods_as_unextendable($class, $method) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->isFinal()->willReturn(true); - $method->getName()->willReturn('finalImplementation'); - - $classNode = $this->reflect($class, array()); - $classNode->getUnextendableMethods()->shouldHaveCount(1); - $classNode->isExtendable('finalImplementation')->shouldReturn(false); - } - - /** - * @param ReflectionClass $interface - */ - function it_throws_an_exception_if_interface_provided_instead_of_class($interface) - { - $interface->isInterface()->willReturn(true); - $interface->getName()->willReturn('Custom\ClassName'); - - $this->shouldThrow('Prophecy\Exception\InvalidArgumentException') - ->duringReflect($interface, array()); - } - - /** - * @param ReflectionClass $interface1 - * @param ReflectionClass $interface2 - * @param ReflectionMethod $method1 - * @param ReflectionMethod $method2 - * @param ReflectionMethod $method3 - */ - function it_reflects_all_interfaces_methods( - $interface1, $interface2, $method1, $method2, $method3 - ) - { - $interface1->getName()->willReturn('MyInterface1'); - $interface2->getName()->willReturn('MyInterface2'); - - $interface1->isInterface()->willReturn(true); - $interface2->isInterface()->willReturn(true); - - $interface1->getMethods()->willReturn(array($method1)); - $interface2->getMethods()->willReturn(array($method2, $method3)); - - $method1->getName()->willReturn('getName'); - $method2->getName()->willReturn('isPublic'); - $method3->getName()->willReturn('isAbstract'); - - $method1->isProtected()->willReturn(false); - $method2->isProtected()->willReturn(false); - $method3->isProtected()->willReturn(false); - - $method1->returnsReference()->willReturn(false); - $method2->returnsReference()->willReturn(false); - $method3->returnsReference()->willReturn(false); - - $method1->isStatic()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method3->isStatic()->willReturn(false); - - $method1->getParameters()->willReturn(array()); - $method2->getParameters()->willReturn(array()); - $method3->getParameters()->willReturn(array()); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method1->hasReturnType()->willReturn(false); - $method2->hasReturnType()->willReturn(false); - $method3->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect(null, array($interface1, $interface2)); - - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('stdClass'); - $classNode->getInterfaces()->shouldReturn(array( - 'Prophecy\Doubler\Generator\ReflectionInterface', 'MyInterface2', 'MyInterface1', - )); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(3); - - $classNode->hasMethod('getName')->shouldReturn(true); - $classNode->hasMethod('isPublic')->shouldReturn(true); - $classNode->hasMethod('isAbstract')->shouldReturn(true); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method1 - * @param ReflectionMethod $method2 - * @param ReflectionMethod $method3 - */ - function it_ignores_virtually_private_methods($class, $method1, $method2, $method3) - { - $class->getName()->willReturn('SomeClass'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method1, $method2, $method3)); - - $method1->getName()->willReturn('_getName'); - $method2->getName()->willReturn('__toString'); - $method3->getName()->willReturn('isAbstract'); - - $method1->isFinal()->willReturn(false); - $method2->isFinal()->willReturn(false); - $method3->isFinal()->willReturn(false); - - $method1->isProtected()->willReturn(false); - $method2->isProtected()->willReturn(false); - $method3->isProtected()->willReturn(false); - - $method1->isStatic()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method3->isStatic()->willReturn(false); - - $method1->returnsReference()->willReturn(false); - $method2->returnsReference()->willReturn(false); - $method3->returnsReference()->willReturn(false); - - $method1->getParameters()->willReturn(array()); - $method2->getParameters()->willReturn(array()); - $method3->getParameters()->willReturn(array()); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method1->hasReturnType()->willReturn(false); - $method2->hasReturnType()->willReturn(false); - $method3->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(2); - - $classNode->hasMethod('isAbstract')->shouldReturn(true); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_does_not_throw_exception_for_virtually_private_finals($class, $method) - { - $class->getName()->willReturn('SomeClass'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->getName()->willReturn('__toString'); - $method->isFinal()->willReturn(true); - - $this->shouldNotThrow()->duringReflect($class, array()); - } - - /** - * @param ReflectionClass $class - */ - function it_throws_an_exception_if_class_provided_in_interfaces_list($class) - { - $class->getName()->willReturn('MyClass'); - $class->isInterface()->willReturn(false); - - $this->shouldThrow('InvalidArgumentException') - ->duringReflect(null, array($class)); - } - - function it_throws_an_exception_if_not_reflection_provided_as_interface() - { - $this->shouldThrow('InvalidArgumentException') - ->duringReflect(null, array(null)); - } - - function it_doesnt_fail_to_typehint_nonexistent_FQCN() - { - $classNode = $this->reflect(new ReflectionClass('spec\Prophecy\Doubler\Generator\OptionalDepsClass'), array()); - $method = $classNode->getMethod('iHaveAStrangeTypeHintedArg'); - $arguments = $method->getArguments(); - $arguments[0]->getTypeHint()->shouldBe('I\Simply\Am\Nonexistent'); - } - - function it_doesnt_fail_to_typehint_nonexistent_RQCN() - { - $classNode = $this->reflect(new ReflectionClass('spec\Prophecy\Doubler\Generator\OptionalDepsClass'), array()); - $method = $classNode->getMethod('iHaveAnEvenStrangerTypeHintedArg'); - $arguments = $method->getArguments(); - $arguments[0]->getTypeHint()->shouldBe('I\Simply\Am\Not'); - } - - function it_doesnt_use_scalar_typehints() - { - $classNode = $this->reflect(new ReflectionClass('ReflectionMethod'), array()); - $method = $classNode->getMethod('export'); - $arguments = $method->getArguments(); - $arguments[0]->getTypeHint()->shouldReturn(null); - $arguments[1]->getTypeHint()->shouldReturn(null); - $arguments[2]->getTypeHint()->shouldReturn(null); - } -} - -class OptionalDepsClass -{ - public function iHaveAStrangeTypeHintedArg(\I\Simply\Am\Nonexistent $class) - { - } - - public function iHaveAnEvenStrangerTypeHintedArg(Simply\Am\Not $class) - { - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php deleted file mode 100644 index 2c8d1886..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php +++ /dev/null @@ -1,92 +0,0 @@ -beConstructedWith('name'); - } - - function it_is_not_be_passed_by_reference_by_default() - { - $this->shouldNotBePassedByReference(); - } - - function it_is_passed_by_reference_if_marked() - { - $this->setAsPassedByReference(); - $this->shouldBePassedByReference(); - } - - function it_is_not_variadic_by_default() - { - $this->shouldNotBeVariadic(); - } - - function it_is_variadic_if_marked() - { - $this->setAsVariadic(); - $this->shouldBeVariadic(); - } - - function it_does_not_have_default_by_default() - { - $this->shouldNotHaveDefault(); - } - - function it_does_not_have_default_if_variadic() - { - $this->setDefault(null); - $this->setAsVariadic(); - $this->shouldNotHaveDefault(); - } - - function it_does_have_default_if_not_variadic() - { - $this->setDefault(null); - $this->setAsVariadic(false); - $this->hasDefault()->shouldReturn(true); - } - - function it_has_name_with_which_it_was_been_constructed() - { - $this->getName()->shouldReturn('name'); - } - - function it_has_no_typehint_by_default() - { - $this->getTypeHint()->shouldReturn(null); - } - - function its_typeHint_is_mutable() - { - $this->setTypeHint('array'); - $this->getTypeHint()->shouldReturn('array'); - } - - function it_does_not_have_default_value_by_default() - { - $this->getDefault()->shouldReturn(null); - } - - function it_is_not_optional_by_default() - { - $this->isOptional()->shouldReturn(false); - } - - function its_default_is_mutable() - { - $this->setDefault(array()); - $this->getDefault()->shouldReturn(array()); - } - - function it_is_marked_as_optional_when_default_is_set() - { - $this->setDefault(null); - $this->isOptional()->shouldReturn(true); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php deleted file mode 100644 index be7e1026..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php +++ /dev/null @@ -1,200 +0,0 @@ -getParentClass()->shouldReturn('stdClass'); - } - - function its_parentClass_is_mutable() - { - $this->setParentClass('Exception'); - $this->getParentClass()->shouldReturn('Exception'); - } - - function its_parentClass_is_set_to_stdClass_if_user_set_null() - { - $this->setParentClass(null); - $this->getParentClass()->shouldReturn('stdClass'); - } - - function it_does_not_implement_any_interface_by_default() - { - $this->getInterfaces()->shouldHaveCount(0); - } - - function its_addInterface_adds_item_to_the_list_of_implemented_interfaces() - { - $this->addInterface('MyInterface'); - $this->getInterfaces()->shouldHaveCount(1); - } - - function its_hasInterface_returns_true_if_class_implements_interface() - { - $this->addInterface('MyInterface'); - $this->hasInterface('MyInterface')->shouldReturn(true); - } - - function its_hasInterface_returns_false_if_class_does_not_implements_interface() - { - $this->hasInterface('MyInterface')->shouldReturn(false); - } - - function it_supports_implementation_of_multiple_interfaces() - { - $this->addInterface('MyInterface'); - $this->addInterface('MySecondInterface'); - $this->getInterfaces()->shouldHaveCount(2); - } - - function it_ignores_same_interfaces_added_twice() - { - $this->addInterface('MyInterface'); - $this->addInterface('MyInterface'); - - $this->getInterfaces()->shouldHaveCount(1); - $this->getInterfaces()->shouldReturn(array('MyInterface')); - } - - function it_does_not_have_methods_by_default() - { - $this->getMethods()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2 - */ - function it_can_has_methods($method1, $method2) - { - $method1->getName()->willReturn('__construct'); - $method2->getName()->willReturn('getName'); - - $this->addMethod($method1); - $this->addMethod($method2); - - $this->getMethods()->shouldReturn(array( - '__construct' => $method1, - 'getName' => $method2 - )); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function its_hasMethod_returns_true_if_method_exists($method) - { - $method->getName()->willReturn('getName'); - - $this->addMethod($method); - - $this->hasMethod('getName')->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function its_getMethod_returns_method_by_name($method) - { - $method->getName()->willReturn('getName'); - - $this->addMethod($method); - - $this->getMethod('getName')->shouldReturn($method); - } - - function its_hasMethod_returns_false_if_method_does_not_exists() - { - $this->hasMethod('getName')->shouldReturn(false); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function its_hasMethod_returns_false_if_method_has_been_removed($method) - { - $method->getName()->willReturn('getName'); - $this->addMethod($method); - $this->removeMethod('getName'); - - $this->hasMethod('getName')->shouldReturn(false); - } - - - function it_does_not_have_properties_by_default() - { - $this->getProperties()->shouldHaveCount(0); - } - - function it_is_able_to_have_properties() - { - $this->addProperty('title'); - $this->addProperty('text', 'private'); - $this->getProperties()->shouldReturn(array( - 'title' => 'public', - 'text' => 'private' - )); - } - - function its_addProperty_does_not_accept_unsupported_visibility() - { - $this->shouldThrow('InvalidArgumentException')->duringAddProperty('title', 'town'); - } - - function its_addProperty_lowercases_visibility_before_setting() - { - $this->addProperty('text', 'PRIVATE'); - $this->getProperties()->shouldReturn(array('text' => 'private')); - } - - function its_has_no_unextendable_methods_by_default() - { - $this->getUnextendableMethods()->shouldHaveCount(0); - } - - function its_addUnextendableMethods_adds_an_unextendable_method() - { - $this->addUnextendableMethod('testMethod'); - $this->getUnextendableMethods()->shouldHaveCount(1); - } - - function its_methods_are_extendable_by_default() - { - $this->isExtendable('testMethod')->shouldReturn(true); - } - - function its_unextendable_methods_are_not_extendable() - { - $this->addUnextendableMethod('testMethod'); - $this->isExtendable('testMethod')->shouldReturn(false); - } - - function its_addUnextendableMethods_doesnt_create_duplicates() - { - $this->addUnextendableMethod('testMethod'); - $this->addUnextendableMethod('testMethod'); - $this->getUnextendableMethods()->shouldHaveCount(1); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function it_throws_an_exception_when_adding_a_method_that_isnt_extendable($method) - { - $this->addUnextendableMethod('testMethod'); - $method->getName()->willReturn('testMethod'); - - $expectedException = new MethodNotExtendableException( - "Method `testMethod` is not extendable, so can not be added.", - "stdClass", - "testMethod" - ); - $this->shouldThrow($expectedException)->duringAddMethod($method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php deleted file mode 100644 index 49bd9f59..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php +++ /dev/null @@ -1,141 +0,0 @@ -beConstructedWith('getTitle'); - } - - function it_has_a_name() - { - $this->getName()->shouldReturn('getTitle'); - } - - function it_has_public_visibility_by_default() - { - $this->getVisibility()->shouldReturn('public'); - } - - function its_visibility_is_mutable() - { - $this->setVisibility('private'); - $this->getVisibility()->shouldReturn('private'); - } - - function it_is_not_static_by_default() - { - $this->shouldNotBeStatic(); - } - - function it_does_not_return_a_reference_by_default() - { - $this->returnsReference()->shouldReturn(false); - } - - function it_should_be_settable_as_returning_a_reference_through_setter() - { - $this->setReturnsReference(); - $this->returnsReference()->shouldReturn(true); - } - - function it_should_be_settable_as_static_through_setter() - { - $this->setStatic(); - $this->shouldBeStatic(); - } - - function it_accepts_only_supported_visibilities() - { - $this->shouldThrow('InvalidArgumentException')->duringSetVisibility('stealth'); - } - - function it_lowercases_visibility_before_setting_it() - { - $this->setVisibility('Public'); - $this->getVisibility()->shouldReturn('public'); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument2 - */ - function its_useParentCode_causes_method_to_call_parent($argument1, $argument2) - { - $argument1->getName()->willReturn('objectName'); - $argument2->getName()->willReturn('default'); - - $argument1->isVariadic()->willReturn(false); - $argument2->isVariadic()->willReturn(true); - - $this->addArgument($argument1); - $this->addArgument($argument2); - - $this->useParentCode(); - - $this->getCode()->shouldReturn( - 'return parent::getTitle($objectName, ...$default);' - ); - } - - function its_code_is_mutable() - { - $this->setCode('echo "code";'); - $this->getCode()->shouldReturn('echo "code";'); - } - - function its_reference_returning_methods_will_generate_exceptions() - { - $this->setCode('echo "code";'); - $this->setReturnsReference(); - $this->getCode()->shouldReturn("throw new \Prophecy\Exception\Doubler\ReturnByReferenceException('Returning by reference not supported', get_class(\$this), 'getTitle');"); - } - - function its_setCode_provided_with_null_cleans_method_body() - { - $this->setCode(null); - $this->getCode()->shouldReturn(''); - } - - function it_is_constructable_with_code() - { - $this->beConstructedWith('getTitle', 'die();'); - $this->getCode()->shouldReturn('die();'); - } - - function it_does_not_have_arguments_by_default() - { - $this->getArguments()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument2 - */ - function it_supports_adding_arguments($argument1, $argument2) - { - $this->addArgument($argument1); - $this->addArgument($argument2); - - $this->getArguments()->shouldReturn(array($argument1, $argument2)); - } - - function it_does_not_have_return_type_by_default() - { - $this->hasReturnType()->shouldReturn(false); - } - - function it_setReturnType_sets_return_type() - { - $returnType = 'string'; - - $this->setReturnType($returnType); - - $this->hasReturnType()->shouldReturn(true); - $this->getReturnType()->shouldReturn($returnType); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/LazyDoubleSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/LazyDoubleSpec.php deleted file mode 100644 index 7026126f..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/LazyDoubleSpec.php +++ /dev/null @@ -1,96 +0,0 @@ -beConstructedWith($doubler); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double - */ - function it_returns_anonymous_double_instance_by_default($doubler, $double) - { - $doubler->double(null, array())->willReturn($double); - - $this->getInstance()->shouldReturn($double); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double - * @param \ReflectionClass $class - */ - function it_returns_class_double_instance_if_set($doubler, $double, $class) - { - $doubler->double($class, array())->willReturn($double); - - $this->setParentClass($class); - - $this->getInstance()->shouldReturn($double); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double1 - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double2 - */ - function it_returns_same_double_instance_if_called_2_times( - $doubler, $double1, $double2 - ) - { - $doubler->double(null, array())->willReturn($double1); - $doubler->double(null, array())->willReturn($double2); - - $this->getInstance()->shouldReturn($double2); - $this->getInstance()->shouldReturn($double2); - } - - function its_setParentClass_throws_ClassNotFoundException_if_class_not_found() - { - $this->shouldThrow('Prophecy\Exception\Doubler\ClassNotFoundException') - ->duringSetParentClass('SomeUnexistingClass'); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double - */ - function its_setParentClass_throws_exception_if_prophecy_is_already_created( - $doubler, $double - ) - { - $doubler->double(null, array())->willReturn($double); - - $this->getInstance(); - - $this->shouldThrow('Prophecy\Exception\Doubler\DoubleException') - ->duringSetParentClass('stdClass'); - } - - function its_addInterface_throws_InterfaceNotFoundException_if_no_interface_found() - { - $this->shouldThrow('Prophecy\Exception\Doubler\InterfaceNotFoundException') - ->duringAddInterface('SomeUnexistingInterface'); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double - */ - function its_addInterface_throws_exception_if_prophecy_is_already_created( - $doubler, $double - ) - { - $doubler->double(null, array())->willReturn($double); - - $this->getInstance(); - - $this->shouldThrow('Prophecy\Exception\Doubler\DoubleException') - ->duringAddInterface('ArrayAccess'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/NameGeneratorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/NameGeneratorSpec.php deleted file mode 100644 index a3e74919..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/NameGeneratorSpec.php +++ /dev/null @@ -1,72 +0,0 @@ -getName()->willReturn('stdClass'); - $this->name($class, array())->shouldStartWith('Double\stdClass\\'); - } - - /** - * @param \ReflectionClass $class - */ - function its_name_generates_name_based_on_namespaced_class_reflection($class) - { - $class->getName()->willReturn('Some\Custom\Class'); - $this->name($class, array())->shouldStartWith('Double\Some\Custom\Class\P'); - } - - /** - * @param \ReflectionClass $interface1 - * @param \ReflectionClass $interface2 - */ - function its_name_generates_name_based_on_interface_shortnames($interface1, $interface2) - { - $interface1->getShortName()->willReturn('HandlerInterface'); - $interface2->getShortName()->willReturn('LoaderInterface'); - - $this->name(null, array($interface1, $interface2))->shouldStartWith( - 'Double\HandlerInterface\LoaderInterface\P' - ); - } - - function it_generates_proper_name_for_no_class_and_interfaces_list() - { - $this->name(null, array())->shouldStartWith('Double\stdClass\P'); - } - - /** - * @param \ReflectionClass $class - * @param \ReflectionClass $interface1 - * @param \ReflectionClass $interface2 - */ - function its_name_generates_name_based_only_on_class_if_its_available( - $class, $interface1, $interface2 - ) - { - $class->getName()->willReturn('Some\Custom\Class'); - $interface1->getShortName()->willReturn('HandlerInterface'); - $interface2->getShortName()->willReturn('LoaderInterface'); - - $this->name($class, array($interface1, $interface2))->shouldStartWith( - 'Double\Some\Custom\Class\P' - ); - } - - public function getMatchers() - { - return array( - 'startWith' => function ($subject, $string) { - return 0 === strpos($subject, $string); - }, - ); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Call/UnexpectedCallExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Call/UnexpectedCallExceptionSpec.php deleted file mode 100644 index 6fd1a5c3..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Call/UnexpectedCallExceptionSpec.php +++ /dev/null @@ -1,32 +0,0 @@ -beConstructedWith('msg', $objectProphecy, 'getName', array('arg1', 'arg2')); - } - - function it_is_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prophecy\ObjectProphecyException'); - } - - function it_exposes_method_name_through_getter() - { - $this->getMethodName()->shouldReturn('getName'); - } - - function it_exposes_arguments_through_getter() - { - $this->getArguments()->shouldReturn(array('arg1', 'arg2')); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassCreatorExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassCreatorExceptionSpec.php deleted file mode 100644 index 58241385..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassCreatorExceptionSpec.php +++ /dev/null @@ -1,28 +0,0 @@ -beConstructedWith('', $node); - } - - function it_is_a_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Exception'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\DoublerException'); - } - - function it_contains_a_reflected_node($node) - { - $this->getClassNode()->shouldReturn($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassMirrorExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassMirrorExceptionSpec.php deleted file mode 100644 index 21e31a34..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassMirrorExceptionSpec.php +++ /dev/null @@ -1,27 +0,0 @@ -beConstructedWith('', $class); - } - - function it_is_a_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Exception'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\DoublerException'); - } - - function it_contains_a_reflected_class_link($class) - { - $this->getReflectedClass()->shouldReturn($class); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassNotFoundExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassNotFoundExceptionSpec.php deleted file mode 100644 index 251512b9..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassNotFoundExceptionSpec.php +++ /dev/null @@ -1,25 +0,0 @@ -beConstructedWith('msg', 'CustomClass'); - } - - function it_is_a_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Exception'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\DoubleException'); - } - - function its_getClassname_returns_classname() - { - $this->getClassname()->shouldReturn('CustomClass'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/DoubleExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/DoubleExceptionSpec.php deleted file mode 100644 index 6fe5a19a..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/DoubleExceptionSpec.php +++ /dev/null @@ -1,14 +0,0 @@ -shouldBeAnInstanceOf('RuntimeException'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\DoublerException'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/InterfaceNotFoundExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/InterfaceNotFoundExceptionSpec.php deleted file mode 100644 index ad1a439e..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/InterfaceNotFoundExceptionSpec.php +++ /dev/null @@ -1,24 +0,0 @@ -beConstructedWith('msg', 'CustomInterface'); - } - - function it_extends_ClassNotFoundException() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\ClassNotFoundException'); - } - - function its_getClassname_returns_classname() - { - $this->getClassname()->shouldReturn('CustomInterface'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php deleted file mode 100644 index 5028b026..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php +++ /dev/null @@ -1,29 +0,0 @@ -beConstructedWith('', 'User', 'getName'); - } - - function it_is_DoubleException() - { - $this->shouldHaveType('Prophecy\Exception\Doubler\DoubleException'); - } - - function it_has_MethodName() - { - $this->getMethodName()->shouldReturn('getName'); - } - - function it_has_classname() - { - $this->getClassName()->shouldReturn('User'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php deleted file mode 100644 index a889dd7e..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php +++ /dev/null @@ -1,40 +0,0 @@ -beConstructedWith('', 'User', 'getName', array(1, 2, 3)); - } - - function it_is_DoubleException() - { - $this->shouldHaveType('Prophecy\Exception\Doubler\DoubleException'); - } - - function it_has_MethodName() - { - $this->getMethodName()->shouldReturn('getName'); - } - - function it_has_classnamej() - { - $this->getClassname()->shouldReturn('User'); - } - - function it_has_an_arguments_list() - { - $this->getArguments()->shouldReturn(array(1, 2, 3)); - } - - function it_has_a_default_null_argument_list() - { - $this->beConstructedWith('', 'User', 'getName'); - $this->getArguments()->shouldReturn(null); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/AggregateExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/AggregateExceptionSpec.php deleted file mode 100644 index 22a5ebdb..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/AggregateExceptionSpec.php +++ /dev/null @@ -1,57 +0,0 @@ -beConstructedWith(null); - } - - function it_is_prediction_exception() - { - $this->shouldBeAnInstanceOf('RuntimeException'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prediction\PredictionException'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - */ - function it_can_store_objectProphecy_link($object) - { - $this->setObjectProphecy($object); - $this->getObjectProphecy()->shouldReturn($object); - } - - function it_should_not_have_exceptions_at_the_beginning() - { - $this->getExceptions()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Exception\Prediction\PredictionException $exception - */ - function it_should_append_exception_through_append_method($exception) - { - $exception->getMessage()->willReturn('Exception #1'); - - $this->append($exception); - - $this->getExceptions()->shouldReturn(array($exception)); - } - - /** - * @param \Prophecy\Exception\Prediction\PredictionException $exception - */ - function it_should_update_message_during_append($exception) - { - $exception->getMessage()->willReturn('Exception #1'); - - $this->append($exception); - - $this->getMessage()->shouldReturn(" Exception #1"); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/NoCallsExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/NoCallsExceptionSpec.php deleted file mode 100644 index 473f1a2d..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/NoCallsExceptionSpec.php +++ /dev/null @@ -1,29 +0,0 @@ -getObjectProphecy()->willReturn($objectProphecy); - - $this->beConstructedWith('message', $methodProphecy); - } - - function it_is_PredictionException() - { - $this->shouldHaveType('Prophecy\Exception\Prediction\PredictionException'); - } - - function it_extends_MethodProphecyException() - { - $this->shouldHaveType('Prophecy\Exception\Prophecy\MethodProphecyException'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsCountExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsCountExceptionSpec.php deleted file mode 100644 index adad975b..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsCountExceptionSpec.php +++ /dev/null @@ -1,31 +0,0 @@ -getObjectProphecy()->willReturn($objectProphecy); - - $this->beConstructedWith('message', $methodProphecy, 5, array($call1, $call2)); - } - - function it_extends_UnexpectedCallsException() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prediction\UnexpectedCallsException'); - } - - function it_should_expose_expectedCount_through_getter() - { - $this->getExpectedCount()->shouldReturn(5); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsExceptionSpec.php deleted file mode 100644 index c0fe24d7..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsExceptionSpec.php +++ /dev/null @@ -1,36 +0,0 @@ -getObjectProphecy()->willReturn($objectProphecy); - - $this->beConstructedWith('message', $methodProphecy, array($call1, $call2)); - } - - function it_is_PredictionException() - { - $this->shouldHaveType('Prophecy\Exception\Prediction\PredictionException'); - } - - function it_extends_MethodProphecyException() - { - $this->shouldHaveType('Prophecy\Exception\Prophecy\MethodProphecyException'); - } - - function it_should_expose_calls_list_through_getter($call1, $call2) - { - $this->getCalls()->shouldReturn(array($call1, $call2)); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/MethodProphecyExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/MethodProphecyExceptionSpec.php deleted file mode 100644 index 97cf9e10..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/MethodProphecyExceptionSpec.php +++ /dev/null @@ -1,30 +0,0 @@ -getObjectProphecy()->willReturn($objectProphecy); - - $this->beConstructedWith('message', $methodProphecy); - } - - function it_extends_DoubleException() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prophecy\ObjectProphecyException'); - } - - function it_holds_a_stub_reference($methodProphecy) - { - $this->getMethodProphecy()->shouldReturn($methodProphecy); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/ObjectProphecyExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/ObjectProphecyExceptionSpec.php deleted file mode 100644 index bcacfedc..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/ObjectProphecyExceptionSpec.php +++ /dev/null @@ -1,27 +0,0 @@ -beConstructedWith('message', $objectProphecy); - } - - function it_should_be_a_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prophecy\ProphecyException'); - } - - function it_holds_double_reference($objectProphecy) - { - $this->getObjectProphecy()->shouldReturn($objectProphecy); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallPredictionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallPredictionSpec.php deleted file mode 100644 index 3da8c599..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallPredictionSpec.php +++ /dev/null @@ -1,42 +0,0 @@ -shouldHaveType('Prophecy\Prediction\PredictionInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call - */ - function it_does_nothing_if_there_is_more_than_one_call_been_made($object, $method, $call) - { - $this->check(array($call), $object, $method)->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_throws_NoCallsException_if_no_calls_found($object, $method, $arguments) - { - $method->getObjectProphecy()->willReturn($object); - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $arguments->__toString()->willReturn('123'); - $object->reveal()->willReturn(new \stdClass()); - $object->findProphecyMethodCalls('getName', Argument::any())->willReturn(array()); - - $this->shouldThrow('Prophecy\Exception\Prediction\NoCallsException') - ->duringCheck(array(), $object, $method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallTimesPredictionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallTimesPredictionSpec.php deleted file mode 100644 index c6708927..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallTimesPredictionSpec.php +++ /dev/null @@ -1,54 +0,0 @@ -beConstructedWith(2); - } - - function it_is_prediction() - { - $this->shouldHaveType('Prophecy\Prediction\PredictionInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_does_nothing_if_there_were_exact_amount_of_calls_being_made( - $object, $method, $call1, $call2 - ) - { - $this->check(array($call1, $call2), $object, $method)->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_throws_UnexpectedCallsCountException_if_calls_found( - $object, $method, $call, $arguments - ) - { - $method->getObjectProphecy()->willReturn($object); - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $arguments->__toString()->willReturn('123'); - - $call->getMethodName()->willReturn('getName'); - $call->getArguments()->willReturn(array(5, 4, 'three')); - $call->getCallPlace()->willReturn('unknown'); - - $this->shouldThrow('Prophecy\Exception\Prediction\UnexpectedCallsCountException') - ->duringCheck(array($call), $object, $method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallbackPredictionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallbackPredictionSpec.php deleted file mode 100644 index 7fe475ef..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallbackPredictionSpec.php +++ /dev/null @@ -1,36 +0,0 @@ -beConstructedWith('get_class'); - } - - function it_is_prediction() - { - $this->shouldHaveType('Prophecy\Prediction\PredictionInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call - */ - function it_proxies_call_to_callback($object, $method, $call) - { - $returnFirstCallCallback = function ($calls, $object, $method) { - throw new RuntimeException; - }; - - $this->beConstructedWith($returnFirstCallCallback); - - $this->shouldThrow('RuntimeException')->duringCheck(array($call), $object, $method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/NoCallsPredictionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/NoCallsPredictionSpec.php deleted file mode 100644 index a3ef9bcb..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/NoCallsPredictionSpec.php +++ /dev/null @@ -1,43 +0,0 @@ -shouldHaveType('Prophecy\Prediction\PredictionInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_does_nothing_if_there_is_no_calls_made($object, $method) - { - $this->check(array(), $object, $method)->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_throws_UnexpectedCallsException_if_calls_found($object, $method, $call, $arguments) - { - $method->getObjectProphecy()->willReturn($object); - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $arguments->__toString()->willReturn('123'); - - $call->getMethodName()->willReturn('getName'); - $call->getArguments()->willReturn(array(5, 4, 'three')); - $call->getCallPlace()->willReturn('unknown'); - - $this->shouldThrow('Prophecy\Exception\Prediction\UnexpectedCallsException') - ->duringCheck(array($call), $object, $method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/CallbackPromiseSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/CallbackPromiseSpec.php deleted file mode 100644 index 5d99b1b1..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/CallbackPromiseSpec.php +++ /dev/null @@ -1,110 +0,0 @@ -beConstructedWith('get_class'); - } - - function it_is_promise() - { - $this->shouldBeAnInstanceOf('Prophecy\Promise\PromiseInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_execute_closure_callback($object, $method) - { - $firstArgumentCallback = function ($args) { - return $args[0]; - }; - - $this->beConstructedWith($firstArgumentCallback); - - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_execute_static_array_callback($object, $method) - { - $firstArgumentCallback = array('spec\Prophecy\Promise\ClassCallback', 'staticCallbackMethod'); - - $this->beConstructedWith($firstArgumentCallback); - - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_execute_instance_array_callback($object, $method) - { - $class = new ClassCallback(); - $firstArgumentCallback = array($class, 'callbackMethod'); - - $this->beConstructedWith($firstArgumentCallback); - - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_execute_string_function_callback($object, $method) - { - $firstArgumentCallback = 'spec\Prophecy\Promise\functionCallbackFirstArgument'; - - $this->beConstructedWith($firstArgumentCallback); - - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - -} - -/** - * Class used to test callbackpromise - * - * @param array - * @return string - */ -class ClassCallback -{ - /** - * @param array $args - */ - function callbackMethod($args) - { - return $args[0]; - } - - /** - * @param array $args - */ - static function staticCallbackMethod($args) - { - return $args[0]; - } -} - -/** - * Callback function used to test callbackpromise - * - * @param array - * @return string - */ -function functionCallbackFirstArgument($args) -{ - return $args[0]; -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php deleted file mode 100644 index 4acb7bb0..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php +++ /dev/null @@ -1,41 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Promise\PromiseInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_return_first_argument_if_provided($object, $method) - { - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_return_null_if_no_arguments_provided($object, $method) - { - $this->execute(array(), $object, $method)->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_return_nth_argument_if_provided($object, $method) - { - $this->beConstructedWith(1); - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('two'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnPromiseSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnPromiseSpec.php deleted file mode 100644 index 18bfd87a..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnPromiseSpec.php +++ /dev/null @@ -1,61 +0,0 @@ -beConstructedWith(array(42)); - } - - function it_is_promise() - { - $this->shouldBeAnInstanceOf('Prophecy\Promise\PromiseInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_returns_value_it_was_constructed_with($object, $method) - { - $this->execute(array(), $object, $method)->shouldReturn(42); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_always_returns_last_value_left_in_the_return_values($object, $method) - { - $this->execute(array(), $object, $method)->shouldReturn(42); - $this->execute(array(), $object, $method)->shouldReturn(42); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_consequently_returns_multiple_values_it_was_constructed_with($object, $method) - { - $this->beConstructedWith(array(42, 24, 12)); - - $this->execute(array(), $object, $method)->shouldReturn(42); - $this->execute(array(), $object, $method)->shouldReturn(24); - $this->execute(array(), $object, $method)->shouldReturn(12); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_returns_null_if_constructed_with_empty_array($object, $method) - { - $this->beConstructedWith(array()); - - $this->execute(array(), $object, $method)->shouldReturn(null); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ThrowPromiseSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ThrowPromiseSpec.php deleted file mode 100644 index 5f448979..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ThrowPromiseSpec.php +++ /dev/null @@ -1,58 +0,0 @@ -beConstructedWith('RuntimeException'); - } - - function it_is_promise() - { - $this->shouldBeAnInstanceOf('Prophecy\Promise\PromiseInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_instantiates_and_throws_exception_from_provided_classname($object, $method) - { - $this->beConstructedWith('InvalidArgumentException'); - - $this->shouldThrow('InvalidArgumentException') - ->duringExecute(array(), $object, $method); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_instantiates_exceptions_with_required_arguments($object, $method) - { - $this->beConstructedWith('spec\Prophecy\Promise\RequiredArgumentException'); - - $this->shouldThrow('spec\Prophecy\Promise\RequiredArgumentException') - ->duringExecute(array(), $object, $method); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_throws_provided_exception($object, $method) - { - $this->beConstructedWith($exc = new \RuntimeException('Some exception')); - - $this->shouldThrow($exc)->duringExecute(array(), $object, $method); - } -} - -class RequiredArgumentException extends \Exception -{ - final public function __construct($message, $code) {} -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php deleted file mode 100644 index 41ee8cde..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php +++ /dev/null @@ -1,384 +0,0 @@ -reveal()->willReturn($reflection); - - $this->beConstructedWith($objectProphecy, 'getName', null); - } - - function it_is_initializable() - { - $this->shouldHaveType('Prophecy\Prophecy\MethodProphecy'); - } - - function its_constructor_throws_MethodNotFoundException_for_unexisting_method($objectProphecy) - { - $this->shouldThrow('Prophecy\Exception\Doubler\MethodNotFoundException')->during( - '__construct', array($objectProphecy, 'getUnexisting', null) - ); - } - - /** - * @param ClassWithFinalMethod $subject - */ - function its_constructor_throws_MethodProphecyException_for_final_methods($objectProphecy, $subject) - { - $objectProphecy->reveal()->willReturn($subject); - - $this->shouldThrow('Prophecy\Exception\Prophecy\MethodProphecyException')->during( - '__construct', array($objectProphecy, 'finalMethod', null) - ); - } - - function its_constructor_transforms_array_passed_as_3rd_argument_to_ArgumentsWildcard( - $objectProphecy - ) - { - $this->beConstructedWith($objectProphecy, 'getName', array(42, 33)); - - $wildcard = $this->getArgumentsWildcard(); - $wildcard->shouldNotBe(null); - $wildcard->__toString()->shouldReturn('exact(42), exact(33)'); - } - - function its_constructor_does_not_touch_third_argument_if_it_is_null($objectProphecy) - { - $this->beConstructedWith($objectProphecy, 'getName', null); - - $wildcard = $this->getArgumentsWildcard(); - $wildcard->shouldBe(null); - } - - /** - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_records_promise_through_will_method($promise, $objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->will($promise); - $this->getPromise()->shouldReturn($promise); - } - - /** - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_adds_itself_to_ObjectProphecy_during_call_to_will($objectProphecy, $promise) - { - $objectProphecy->addMethodProphecy($this)->shouldBeCalled(); - - $this->will($promise); - } - - function it_adds_ReturnPromise_during_willReturn_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->willReturn(42); - $this->getPromise()->shouldBeAnInstanceOf('Prophecy\Promise\ReturnPromise'); - } - - function it_adds_ThrowPromise_during_willThrow_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->willThrow('RuntimeException'); - $this->getPromise()->shouldBeAnInstanceOf('Prophecy\Promise\ThrowPromise'); - } - - function it_adds_ReturnArgumentPromise_during_willReturnArgument_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->willReturnArgument(); - $this->getPromise()->shouldBeAnInstanceOf('Prophecy\Promise\ReturnArgumentPromise'); - } - - function it_adds_ReturnArgumentPromise_during_willReturnArgument_call_with_index_argument($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->willReturnArgument(1); - $promise = $this->getPromise(); - $promise->shouldBeAnInstanceOf('Prophecy\Promise\ReturnArgumentPromise'); - $promise->execute(array('one', 'two'), $objectProphecy, $this)->shouldReturn('two'); - } - - function it_adds_CallbackPromise_during_will_call_with_callback_argument($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $callback = function () {}; - - $this->will($callback); - $this->getPromise()->shouldBeAnInstanceOf('Prophecy\Promise\CallbackPromise'); - } - - /** - * @param \Prophecy\Prediction\PredictionInterface $prediction - */ - function it_records_prediction_through_should_method($prediction, $objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->callOnWrappedObject('should', array($prediction)); - $this->getPrediction()->shouldReturn($prediction); - } - - function it_adds_CallbackPrediction_during_should_call_with_callback_argument($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $callback = function () {}; - - $this->callOnWrappedObject('should', array($callback)); - $this->getPrediction()->shouldBeAnInstanceOf('Prophecy\Prediction\CallbackPrediction'); - } - - /** - * @param \Prophecy\Prediction\PredictionInterface $prediction - */ - function it_adds_itself_to_ObjectProphecy_during_call_to_should($objectProphecy, $prediction) - { - $objectProphecy->addMethodProphecy($this)->shouldBeCalled(); - - $this->callOnWrappedObject('should', array($prediction)); - } - - function it_adds_CallPrediction_during_shouldBeCalled_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->callOnWrappedObject('shouldBeCalled', array()); - $this->getPrediction()->shouldBeAnInstanceOf('Prophecy\Prediction\CallPrediction'); - } - - function it_adds_NoCallsPrediction_during_shouldNotBeCalled_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->callOnWrappedObject('shouldNotBeCalled', array()); - $this->getPrediction()->shouldBeAnInstanceOf('Prophecy\Prediction\NoCallsPrediction'); - } - - function it_adds_CallTimesPrediction_during_shouldBeCalledTimes_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->callOnWrappedObject('shouldBeCalledTimes', array(5)); - $this->getPrediction()->shouldBeAnInstanceOf('Prophecy\Prediction\CallTimesPrediction'); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_checks_prediction_via_shouldHave_method_call( - $objectProphecy, $arguments, $prediction, $call1, $call2 - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->shouldBeCalled(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->withArguments($arguments); - $this->callOnWrappedObject('shouldHave', array($prediction)); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_sets_return_promise_during_shouldHave_call_if_none_was_set_before( - $objectProphecy, $arguments, $prediction, $call1, $call2 - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->shouldBeCalled(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->withArguments($arguments); - $this->callOnWrappedObject('shouldHave', array($prediction)); - - $this->getPromise()->shouldReturnAnInstanceOf('Prophecy\Promise\ReturnPromise'); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_does_not_set_return_promise_during_shouldHave_call_if_it_was_set_before( - $objectProphecy, $arguments, $prediction, $call1, $call2, $promise - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->shouldBeCalled(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->will($promise); - $this->withArguments($arguments); - $this->callOnWrappedObject('shouldHave', array($prediction)); - - $this->getPromise()->shouldReturn($promise); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction1 - * @param \Prophecy\Prediction\PredictionInterface $prediction2 - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_records_checked_predictions( - $objectProphecy, $arguments, $prediction1, $prediction2, $call1, $call2, $promise - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction1->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->willReturn(); - $prediction2->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->willReturn(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->will($promise); - $this->withArguments($arguments); - $this->callOnWrappedObject('shouldHave', array($prediction1)); - $this->callOnWrappedObject('shouldHave', array($prediction2)); - - $this->getCheckedPredictions()->shouldReturn(array($prediction1, $prediction2)); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_records_even_failed_checked_predictions( - $objectProphecy, $arguments, $prediction, $call1, $call2, $promise - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->willThrow(new \RuntimeException()); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->will($promise); - $this->withArguments($arguments); - - try { - $this->callOnWrappedObject('shouldHave', array($prediction)); - } catch (\Exception $e) {} - - $this->getCheckedPredictions()->shouldReturn(array($prediction)); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_checks_prediction_via_shouldHave_method_call_with_callback( - $objectProphecy, $arguments, $prediction, $call1, $call2 - ) - { - $callback = function ($calls, $object, $method) { - throw new \RuntimeException; - }; - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->withArguments($arguments); - $this->shouldThrow('RuntimeException')->duringShouldHave($callback); - } - - function it_does_nothing_during_checkPrediction_if_no_prediction_set() - { - $this->checkPrediction()->shouldReturn(null); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_checks_set_prediction_during_checkPrediction( - $objectProphecy, $arguments, $prediction, $call1, $call2 - ) - { - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->shouldBeCalled(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->withArguments($arguments); - $this->callOnWrappedObject('should', array($prediction)); - $this->checkPrediction(); - } - - function it_links_back_to_ObjectProphecy_through_getter($objectProphecy) - { - $this->getObjectProphecy()->shouldReturn($objectProphecy); - } - - function it_has_MethodName() - { - $this->getMethodName()->shouldReturn('getName'); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $wildcard - */ - function it_contains_ArgumentsWildcard_it_was_constructed_with($objectProphecy, $wildcard) - { - $this->beConstructedWith($objectProphecy, 'getName', $wildcard); - - $this->getArgumentsWildcard()->shouldReturn($wildcard); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $wildcard - */ - function its_ArgumentWildcard_is_mutable_through_setter($wildcard) - { - $this->withArguments($wildcard); - - $this->getArgumentsWildcard()->shouldReturn($wildcard); - } - - function its_withArguments_transforms_passed_array_into_ArgumentsWildcard() - { - $this->withArguments(array(42, 33)); - - $wildcard = $this->getArgumentsWildcard(); - $wildcard->shouldNotBe(null); - $wildcard->__toString()->shouldReturn('exact(42), exact(33)'); - } - - function its_withArguments_throws_exception_if_wrong_arguments_provided() - { - $this->shouldThrow('Prophecy\Exception\InvalidArgumentException')->duringWithArguments(42); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php deleted file mode 100644 index 7e249d9b..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php +++ /dev/null @@ -1,319 +0,0 @@ -beConstructedWith($lazyDouble); - - $lazyDouble->getInstance()->willReturn($double); - } - - function it_implements_ProphecyInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Prophecy\ProphecyInterface'); - } - - function it_sets_parentClass_during_willExtend_call($lazyDouble) - { - $lazyDouble->setParentClass('123')->shouldBeCalled(); - - $this->willExtend('123'); - } - - function it_adds_interface_during_willImplement_call($lazyDouble) - { - $lazyDouble->addInterface('222')->shouldBeCalled(); - - $this->willImplement('222'); - } - - function it_sets_constructor_arguments_during_willBeConstructedWith_call($lazyDouble) - { - $lazyDouble->setArguments(array(1, 2, 5))->shouldBeCalled(); - - $this->willBeConstructedWith(array(1, 2, 5)); - } - - function it_does_not_have_method_prophecies_by_default() - { - $this->getMethodProphecies()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method1 - * @param \Prophecy\Prophecy\MethodProphecy $method2 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_should_get_method_prophecies_by_method_name($method1, $method2, $arguments) - { - $method1->getMethodName()->willReturn('getName'); - $method1->getArgumentsWildcard()->willReturn($arguments); - $method2->getMethodName()->willReturn('setName'); - $method2->getArgumentsWildcard()->willReturn($arguments); - - $this->addMethodProphecy($method1); - $this->addMethodProphecy($method2); - - $methods = $this->getMethodProphecies('setName'); - $methods->shouldHaveCount(1); - $methods[0]->getMethodName()->shouldReturn('setName'); - } - - function it_should_return_empty_array_if_no_method_prophecies_found() - { - $methods = $this->getMethodProphecies('setName'); - $methods->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Call\CallCenter $callCenter - */ - function it_should_proxy_makeProphecyMethodCall_to_CallCenter($lazyDouble, $callCenter) - { - $this->beConstructedWith($lazyDouble, $callCenter); - - $callCenter->makeCall($this->getWrappedObject(), 'setName', array('everzet'))->willReturn(42); - - $this->makeProphecyMethodCall('setName', array('everzet'))->shouldReturn(42); - } - - /** - * @param \Prophecy\Call\CallCenter $callCenter - * @param \Prophecy\Prophecy\RevealerInterface $revealer - */ - function it_should_reveal_arguments_and_return_values_from_callCenter( - $lazyDouble, $callCenter, $revealer - ) - { - $this->beConstructedWith($lazyDouble, $callCenter, $revealer); - - $revealer->reveal(array('question'))->willReturn(array('life')); - $revealer->reveal('answer')->willReturn(42); - - $callCenter->makeCall($this->getWrappedObject(), 'setName', array('life'))->willReturn('answer'); - - $this->makeProphecyMethodCall('setName', array('question'))->shouldReturn(42); - } - - /** - * @param \Prophecy\Call\CallCenter $callCenter - * @param \Prophecy\Argument\ArgumentsWildcard $wildcard - * @param \Prophecy\Call\Call $call - */ - function it_should_proxy_getProphecyMethodCalls_to_CallCenter( - $lazyDouble, $callCenter, $wildcard, $call - ) - { - $this->beConstructedWith($lazyDouble, $callCenter); - - $callCenter->findCalls('setName', $wildcard)->willReturn(array($call)); - - $this->findProphecyMethodCalls('setName', $wildcard)->shouldReturn(array($call)); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard - */ - function its_addMethodProphecy_adds_method_prophecy( - $methodProphecy, $argumentsWildcard - ) - { - $methodProphecy->getArgumentsWildcard()->willReturn($argumentsWildcard); - $methodProphecy->getMethodName()->willReturn('getUsername'); - - $this->addMethodProphecy($methodProphecy); - - $this->getMethodProphecies()->shouldReturn(array( - 'getUsername' => array($methodProphecy) - )); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy1 - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy2 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard1 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard2 - */ - function its_addMethodProphecy_handles_prophecies_with_different_arguments( - $methodProphecy1, $methodProphecy2, $argumentsWildcard1, $argumentsWildcard2 - ) - { - $methodProphecy1->getArgumentsWildcard()->willReturn($argumentsWildcard1); - $methodProphecy1->getMethodName()->willReturn('getUsername'); - - $methodProphecy2->getArgumentsWildcard()->willReturn($argumentsWildcard2); - $methodProphecy2->getMethodName()->willReturn('getUsername'); - - $this->addMethodProphecy($methodProphecy1); - $this->addMethodProphecy($methodProphecy2); - - $this->getMethodProphecies()->shouldReturn(array( - 'getUsername' => array( - $methodProphecy1, - $methodProphecy2, - ) - )); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy1 - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy2 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard1 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard2 - */ - function its_addMethodProphecy_handles_prophecies_for_different_methods( - $methodProphecy1, $methodProphecy2, $argumentsWildcard1, $argumentsWildcard2 - ) - { - $methodProphecy1->getArgumentsWildcard()->willReturn($argumentsWildcard1); - $methodProphecy1->getMethodName()->willReturn('getUsername'); - - $methodProphecy2->getArgumentsWildcard()->willReturn($argumentsWildcard2); - $methodProphecy2->getMethodName()->willReturn('isUsername'); - - $this->addMethodProphecy($methodProphecy1); - $this->addMethodProphecy($methodProphecy2); - - $this->getMethodProphecies()->shouldReturn(array( - 'getUsername' => array( - $methodProphecy1 - ), - 'isUsername' => array( - $methodProphecy2 - ) - )); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy - */ - function its_addMethodProphecy_throws_exception_when_method_has_no_ArgumentsWildcard( - $methodProphecy - ) - { - $methodProphecy->getArgumentsWildcard()->willReturn(null); - $methodProphecy->getObjectProphecy()->willReturn($this); - $methodProphecy->getMethodName()->willReturn('getTitle'); - - $this->shouldThrow('Prophecy\Exception\Prophecy\MethodProphecyException')->duringAddMethodProphecy( - $methodProphecy - ); - } - - function it_returns_null_after_checkPredictions_call_if_there_is_no_method_prophecies() - { - $this->checkProphecyMethodsPredictions()->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy1 - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy2 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard1 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard2 - */ - function it_throws_AggregateException_during_checkPredictions_if_predictions_fail( - $methodProphecy1, $methodProphecy2, $argumentsWildcard1, $argumentsWildcard2 - ) - { - $methodProphecy1->getMethodName()->willReturn('getName'); - $methodProphecy1->getArgumentsWildcard()->willReturn($argumentsWildcard1); - $methodProphecy1->checkPrediction() - ->willThrow('Prophecy\Exception\Prediction\AggregateException'); - - $methodProphecy2->getMethodName()->willReturn('setName'); - $methodProphecy2->getArgumentsWildcard()->willReturn($argumentsWildcard2); - $methodProphecy2->checkPrediction() - ->willThrow('Prophecy\Exception\Prediction\AggregateException'); - - $this->addMethodProphecy($methodProphecy1); - $this->addMethodProphecy($methodProphecy2); - - $this->shouldThrow('Prophecy\Exception\Prediction\AggregateException') - ->duringCheckProphecyMethodsPredictions(); - } - - /** - * @param \Prophecy\Doubler\Doubler $doubler - * @param \Prophecy\Prophecy\ProphecySubjectInterface $reflection - */ - function it_returns_new_MethodProphecy_instance_for_arbitrary_call($doubler, $reflection) - { - $doubler->double(Argument::any())->willReturn($reflection); - - $return = $this->getProphecy(); - $return->shouldBeAnInstanceOf('Prophecy\Prophecy\MethodProphecy'); - $return->getMethodName()->shouldReturn('getProphecy'); - } - - /** - * @param \Prophecy\Doubler\Doubler $doubler - * @param \Prophecy\Prophecy\ProphecySubjectInterface $reflection - */ - function it_returns_same_MethodProphecy_for_same_registered_signature($doubler, $reflection) - { - $doubler->double(Argument::any())->willReturn($reflection); - - $this->addMethodProphecy($methodProphecy1 = $this->getProphecy(1, 2, 3)); - $methodProphecy2 = $this->getProphecy(1, 2, 3); - - $methodProphecy2->shouldBe($methodProphecy1); - } - - /** - * @param \Prophecy\Doubler\Doubler $doubler - * @param \Prophecy\Prophecy\ProphecySubjectInterface $reflection - */ - function it_returns_new_MethodProphecy_for_different_signatures($doubler, $reflection) - { - $doubler->double(Argument::any())->willReturn($reflection); - - $value = new ObjectProphecySpecFixtureB('ABC'); - $value2 = new ObjectProphecySpecFixtureB('CBA'); - - $this->addMethodProphecy($methodProphecy1 = $this->getProphecy(1, 2, 3, $value)); - $methodProphecy2 = $this->getProphecy(1, 2, 3, $value2); - - $methodProphecy2->shouldNotBe($methodProphecy1); - } - - /** - * @param \Prophecy\Doubler\Doubler $doubler - * @param \Prophecy\Prophecy\ProphecySubjectInterface $reflection - */ - function it_returns_new_MethodProphecy_for_all_callback_signatures($doubler, $reflection) - { - $doubler->double(Argument::any())->willReturn($reflection); - - $this->addMethodProphecy($methodProphecy1 = $this->getProphecy(function(){})); - $methodProphecy2 = $this->getProphecy(function(){}); - - $methodProphecy2->shouldNotBe($methodProphecy1); - } -} - -class ObjectProphecySpecFixtureA -{ - public $errors; -} - -class ObjectProphecySpecFixtureB extends ObjectProphecySpecFixtureA -{ - public $errors; - public $value = null; - - public function __construct($value) - { - $this->value = $value; - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/RevealerSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/RevealerSpec.php deleted file mode 100644 index 4d83d739..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/RevealerSpec.php +++ /dev/null @@ -1,51 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Prophecy\RevealerInterface'); - } - - /** - * @param \Prophecy\Prophecy\ProphecyInterface $prophecy - * @param \stdClass $object - */ - function it_reveals_single_instance_of_ProphecyInterface($prophecy, $object) - { - $prophecy->reveal()->willReturn($object); - - $this->reveal($prophecy)->shouldReturn($object); - } - - /** - * @param \Prophecy\Prophecy\ProphecyInterface $prophecy1 - * @param \Prophecy\Prophecy\ProphecyInterface $prophecy2 - * @param \stdClass $object1 - * @param \stdClass $object2 - */ - function it_reveals_instances_of_ProphecyInterface_inside_array( - $prophecy1, $prophecy2, $object1, $object2 - ) - { - $prophecy1->reveal()->willReturn($object1); - $prophecy2->reveal()->willReturn($object2); - - $this->reveal(array( - array('item' => $prophecy2), - $prophecy1 - ))->shouldReturn(array( - array('item' => $object2), - $object1 - )); - } - - function it_does_not_touch_non_prophecy_interface() - { - $this->reveal(42)->shouldReturn(42); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ProphetSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ProphetSpec.php deleted file mode 100644 index 74d5976a..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ProphetSpec.php +++ /dev/null @@ -1,91 +0,0 @@ -double(null, array())->willReturn($double); - - $this->beConstructedWith($doubler); - } - - function it_constructs_new_prophecy_on_prophesize_call() - { - $prophecy = $this->prophesize(); - $prophecy->shouldBeAnInstanceOf('Prophecy\Prophecy\ObjectProphecy'); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $newDouble - */ - function it_constructs_new_prophecy_with_parent_class_if_specified($doubler, $newDouble) - { - $doubler->double(Argument::any(), array())->willReturn($newDouble); - - $this->prophesize('Prophecy\Prophet')->reveal()->shouldReturn($newDouble); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $newDouble - */ - function it_constructs_new_prophecy_with_interface_if_specified($doubler, $newDouble) - { - $doubler->double(null, Argument::any())->willReturn($newDouble); - - $this->prophesize('ArrayAccess')->reveal()->shouldReturn($newDouble); - } - - function it_exposes_all_created_prophecies_through_getter() - { - $prophecy1 = $this->prophesize(); - $prophecy2 = $this->prophesize(); - - $this->getProphecies()->shouldReturn(array($prophecy1, $prophecy2)); - } - - function it_does_nothing_during_checkPredictions_call_if_no_predictions_defined() - { - $this->checkPredictions()->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method1 - * @param \Prophecy\Prophecy\MethodProphecy $method2 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments1 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments2 - */ - function it_throws_AggregateException_if_defined_predictions_fail( - $method1, $method2, $arguments1, $arguments2 - ) - { - $method1->getMethodName()->willReturn('getName'); - $method1->getArgumentsWildcard()->willReturn($arguments1); - $method1->checkPrediction()->willReturn(null); - - $method2->getMethodName()->willReturn('isSet'); - $method2->getArgumentsWildcard()->willReturn($arguments2); - $method2->checkPrediction()->willThrow( - 'Prophecy\Exception\Prediction\AggregateException' - ); - - $this->prophesize()->addMethodProphecy($method1); - $this->prophesize()->addMethodProphecy($method2); - - $this->shouldThrow('Prophecy\Exception\Prediction\AggregateException') - ->duringCheckPredictions(); - } - - function it_exposes_doubler_through_getter($doubler) - { - $this->getDoubler()->shouldReturn($doubler); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php deleted file mode 100644 index a4eef59f..00000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php +++ /dev/null @@ -1,97 +0,0 @@ -stringify(42)->shouldReturn('42'); - } - - function it_generates_proper_string_representation_for_string() - { - $this->stringify('some string')->shouldReturn('"some string"'); - } - - function it_generates_single_line_representation_for_multiline_string() - { - $this->stringify("some\nstring")->shouldReturn('"some\\nstring"'); - } - - function it_generates_proper_string_representation_for_double() - { - $this->stringify(42.3)->shouldReturn('42.3'); - } - - function it_generates_proper_string_representation_for_boolean_true() - { - $this->stringify(true)->shouldReturn('true'); - } - - function it_generates_proper_string_representation_for_boolean_false() - { - $this->stringify(false)->shouldReturn('false'); - } - - function it_generates_proper_string_representation_for_null() - { - $this->stringify(null)->shouldReturn('null'); - } - - function it_generates_proper_string_representation_for_empty_array() - { - $this->stringify(array())->shouldReturn('[]'); - } - - function it_generates_proper_string_representation_for_array() - { - $this->stringify(array('zet', 42))->shouldReturn('["zet", 42]'); - } - - function it_generates_proper_string_representation_for_hash_containing_one_value() - { - $this->stringify(array('ever' => 'zet'))->shouldReturn('["ever" => "zet"]'); - } - - function it_generates_proper_string_representation_for_hash() - { - $this->stringify(array('ever' => 'zet', 52 => 'hey', 'num' => 42))->shouldReturn( - '["ever" => "zet", 52 => "hey", "num" => 42]' - ); - } - - function it_generates_proper_string_representation_for_resource() - { - $resource = fopen(__FILE__, 'r'); - $this->stringify($resource)->shouldReturn('stream:'.$resource); - } - - /** - * @param \stdClass $object - */ - function it_generates_proper_string_representation_for_object($object) - { - $objHash = sprintf('%s:%s', - get_class($object->getWrappedObject()), - spl_object_hash($object->getWrappedObject()) - ) . " Object (\n 'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n)"; - - $this->stringify($object)->shouldReturn("$objHash"); - } - - /** - * @param stdClass $object - */ - function it_generates_proper_string_representation_for_object_without_exporting($object) - { - $objHash = sprintf('%s:%s', - get_class($object->getWrappedObject()), - spl_object_hash($object->getWrappedObject()) - ); - - $this->stringify($object, false)->shouldReturn("$objHash"); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php index 8d93bfd6..d7710776 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php @@ -61,11 +61,11 @@ class ObjectStateToken implements TokenInterface $actual = call_user_func(array($argument, $this->name)); $comparator = $this->comparatorFactory->getComparatorFor( - $actual, $this->value + $this->value, $actual ); try { - $comparator->assertEquals($actual, $this->value); + $comparator->assertEquals($this->value, $actual); return 8; } catch (ComparisonFailure $failure) { return false; diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php index a1f8c618..53b80f05 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php @@ -11,6 +11,7 @@ namespace Prophecy\Call; +use Prophecy\Exception\Prophecy\MethodProphecyException; use Prophecy\Prophecy\MethodProphecy; use Prophecy\Prophecy\ObjectProphecy; use Prophecy\Argument\ArgumentsWildcard; @@ -96,16 +97,24 @@ class CallCenter @usort($matches, function ($match1, $match2) { return $match2[0] - $match1[0]; }); // If Highest rated method prophecy has a promise - execute it or return null instead + $methodProphecy = $matches[0][1]; $returnValue = null; $exception = null; - if ($promise = $matches[0][1]->getPromise()) { + if ($promise = $methodProphecy->getPromise()) { try { - $returnValue = $promise->execute($arguments, $prophecy, $matches[0][1]); + $returnValue = $promise->execute($arguments, $prophecy, $methodProphecy); } catch (\Exception $e) { $exception = $e; } } + if ($methodProphecy->hasReturnVoid() && $returnValue !== null) { + throw new MethodProphecyException( + "The method \"$methodName\" has a void return type, but the promise returned a value", + $methodProphecy + ); + } + $this->recordedCalls[] = new Call( $methodName, $arguments, $returnValue, $exception, $file, $line ); diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php index b0d9793a..41ea2fc1 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php @@ -51,7 +51,8 @@ class KeywordPatch implements ClassPatchInterface * * @return int Priority number (higher - earlier) */ - public function getPriority() { + public function getPriority() + { return 49; } @@ -60,7 +61,11 @@ class KeywordPatch implements ClassPatchInterface * * @return array */ - private function getKeywords() { + private function getKeywords() + { + if (\PHP_VERSION_ID >= 70000) { + return array('__halt_compiler'); + } return array( '__halt_compiler', diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php index 23891c09..5f2c6077 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php @@ -51,23 +51,27 @@ class MagicCallPatch implements ClassPatchInterface */ public function apply(ClassNode $node) { - $parentClass = $node->getParentClass(); - $reflectionClass = new \ReflectionClass($parentClass); + $types = array_filter($node->getInterfaces(), function ($interface) { + return 0 !== strpos($interface, 'Prophecy\\'); + }); + $types[] = $node->getParentClass(); - $tagList = $this->tagRetriever->getTagList($reflectionClass); + foreach ($types as $type) { + $reflectionClass = new \ReflectionClass($type); + $tagList = $this->tagRetriever->getTagList($reflectionClass); - foreach($tagList as $tag) { - $methodName = $tag->getMethodName(); + foreach($tagList as $tag) { + $methodName = $tag->getMethodName(); - if (empty($methodName)) { - continue; - } + if (empty($methodName)) { + continue; + } - if (!$reflectionClass->hasMethod($methodName)) { - $methodNode = new MethodNode($methodName); - $methodNode->setStatic($tag->isStatic()); - - $node->addMethod($methodNode); + if (!$reflectionClass->hasMethod($methodName)) { + $methodNode = new MethodNode($methodName); + $methodNode->setStatic($tag->isStatic()); + $node->addMethod($methodNode); + } } } } diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php index ab0bb7c7..fc2cc4de 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php @@ -50,9 +50,15 @@ class ProphecySubjectPatch implements ClassPatchInterface continue; } - $method->setCode( - 'return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());' - ); + if ($method->getReturnType() === 'void') { + $method->setCode( + '$this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());' + ); + } else { + $method->setCode( + 'return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());' + ); + } } $prophecySetter = new MethodNode('setProphecy'); diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php index eba82980..ceee94a2 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php @@ -34,7 +34,6 @@ class SplFileInfoPatch implements ClassPatchInterface if (null === $node->getParentClass()) { return false; } - return 'SplFileInfo' === $node->getParentClass() || is_subclass_of($node->getParentClass(), 'SplFileInfo') ; @@ -61,7 +60,15 @@ class SplFileInfoPatch implements ClassPatchInterface } if ($this->nodeIsSplFileObject($node)) { - $constructor->setCode('return parent::__construct("' . __FILE__ .'");'); + $filePath = str_replace('\\','\\\\',__FILE__); + $constructor->setCode('return parent::__construct("' . $filePath .'");'); + + return; + } + + if ($this->nodeIsSymfonySplFileInfo($node)) { + $filePath = str_replace('\\','\\\\',__FILE__); + $constructor->setCode('return parent::__construct("' . $filePath .'", "", "");'); return; } @@ -102,4 +109,15 @@ class SplFileInfoPatch implements ClassPatchInterface return 'SplFileObject' === $parent || is_subclass_of($parent, 'SplFileObject'); } + + /** + * @param ClassNode $node + * @return boolean + */ + private function nodeIsSymfonySplFileInfo(ClassNode $node) + { + $parent = $node->getParentClass(); + + return 'Symfony\\Component\\Finder\\SplFileInfo' === $parent; + } } diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php index dc03f429..fc1079c5 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php @@ -60,20 +60,44 @@ class ClassCodeGenerator $method->returnsReference() ? '&':'', $method->getName(), implode(', ', $this->generateArguments($method->getArguments())), - version_compare(PHP_VERSION, '7.0', '>=') && $method->hasReturnType() - ? sprintf(': %s', $method->getReturnType()) - : '' + $this->getReturnType($method) ); $php .= $method->getCode()."\n"; return $php.'}'; } + /** + * @return string + */ + private function getReturnType(Node\MethodNode $method) + { + if (version_compare(PHP_VERSION, '7.1', '>=')) { + if ($method->hasReturnType()) { + return $method->hasNullableReturnType() + ? sprintf(': ?%s', $method->getReturnType()) + : sprintf(': %s', $method->getReturnType()); + } + } + + if (version_compare(PHP_VERSION, '7.0', '>=')) { + return $method->hasReturnType() && $method->getReturnType() !== 'void' + ? sprintf(': %s', $method->getReturnType()) + : ''; + } + + return ''; + } + private function generateArguments(array $arguments) { return array_map(function (Node\ArgumentNode $argument) { $php = ''; + if (version_compare(PHP_VERSION, '7.1', '>=')) { + $php .= $argument->isNullable() ? '?' : ''; + } + if ($hint = $argument->getTypeHint()) { switch ($hint) { case 'array': @@ -81,6 +105,15 @@ class ClassCodeGenerator $php .= $hint; break; + case 'iterable': + if (version_compare(PHP_VERSION, '7.1', '>=')) { + $php .= $hint; + break; + } + + $php .= '\\'.$hint; + break; + case 'string': case 'int': case 'float': diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php index acdb2c15..9f99239f 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php @@ -143,7 +143,7 @@ class ClassMirror $node->setReturnsReference(); } - if (version_compare(PHP_VERSION, '7.0', '>=') && true === $method->hasReturnType()) { + if (version_compare(PHP_VERSION, '7.0', '>=') && $method->hasReturnType()) { $returnType = (string) $method->getReturnType(); $returnTypeLower = strtolower($returnType); @@ -155,6 +155,10 @@ class ClassMirror } $node->setReturnType($returnType); + + if (version_compare(PHP_VERSION, '7.1', '>=') && $method->getReturnType()->allowsNull()) { + $node->setNullableReturnType(true); + } } if (is_array($params = $method->getParameters()) && count($params)) { diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php index cf6fd735..dd29b68f 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php @@ -24,6 +24,7 @@ class ArgumentNode private $optional = false; private $byReference = false; private $isVariadic = false; + private $isNullable = false; /** * @param string $name @@ -88,4 +89,14 @@ class ArgumentNode { return $this->isVariadic; } + + public function isNullable() + { + return $this->isNullable; + } + + public function setAsNullable($isNullable = true) + { + $this->isNullable = $isNullable; + } } diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php index 8402ab8f..ee363ab3 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php @@ -26,6 +26,7 @@ class MethodNode private $static = false; private $returnsReference = false; private $returnType; + private $nullableReturnType = false; /** * @var ArgumentNode[] @@ -116,12 +117,14 @@ class MethodNode $this->returnType = null; break; - case 'string'; + case 'string': case 'float': case 'int': case 'bool': case 'array': case 'callable': + case 'iterable': + case 'void': $this->returnType = $type; break; @@ -148,6 +151,22 @@ class MethodNode return $this->returnType; } + /** + * @param bool $bool + */ + public function setNullableReturnType($bool = true) + { + $this->nullableReturnType = (bool) $bool; + } + + /** + * @return bool + */ + public function hasNullableReturnType() + { + return $this->nullableReturnType; + } + /** * @param string $code */ diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php index 68a8b471..7250fa3c 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php @@ -34,24 +34,22 @@ class ThrowPromise implements PromiseInterface /** * Initializes promise. * - * @param string|\Exception $exception Exception class name or instance + * @param string|\Exception|\Throwable $exception Exception class name or instance * * @throws \Prophecy\Exception\InvalidArgumentException */ public function __construct($exception) { if (is_string($exception)) { - if (!class_exists($exception) - && 'Exception' !== $exception - && !is_subclass_of($exception, 'Exception')) { + if (!class_exists($exception) || !$this->isAValidThrowable($exception)) { throw new InvalidArgumentException(sprintf( - 'Exception class or instance expected as argument to ThrowPromise, but got %s.', + 'Exception / Throwable class or instance expected as argument to ThrowPromise, but got %s.', $exception )); } - } elseif (!$exception instanceof \Exception) { + } elseif (!$exception instanceof \Exception && !$exception instanceof \Throwable) { throw new InvalidArgumentException(sprintf( - 'Exception class or instance expected as argument to ThrowPromise, but got %s.', + 'Exception / Throwable class or instance expected as argument to ThrowPromise, but got %s.', is_object($exception) ? get_class($exception) : gettype($exception) )); } @@ -88,4 +86,14 @@ class ThrowPromise implements PromiseInterface throw $this->exception; } + + /** + * @param string $exception + * + * @return bool + */ + private function isAValidThrowable($exception) + { + return is_a($exception, 'Exception', true) || is_subclass_of($exception, 'Throwable', true); + } } diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php index 27e80f5b..90df1efc 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php @@ -33,6 +33,7 @@ class MethodProphecy private $prediction; private $checkedPredictions = array(); private $bound = false; + private $voidReturnType = false; /** * Initializes method prophecy. @@ -71,6 +72,12 @@ class MethodProphecy if (version_compare(PHP_VERSION, '7.0', '>=') && true === $reflectedMethod->hasReturnType()) { $type = (string) $reflectedMethod->getReturnType(); + + if ('void' === $type) { + $this->voidReturnType = true; + return; + } + $this->will(function () use ($type) { switch ($type) { case 'string': return ''; @@ -157,12 +164,19 @@ class MethodProphecy /** * Sets return promise to the prophecy. * - * @see Prophecy\Promise\ReturnPromise + * @see \Prophecy\Promise\ReturnPromise * * @return $this */ public function willReturn() { + if ($this->voidReturnType) { + throw new MethodProphecyException( + "The method \"$this->methodName\" has a void return type, and so cannot return anything", + $this + ); + } + return $this->will(new Promise\ReturnPromise(func_get_args())); } @@ -171,19 +185,23 @@ class MethodProphecy * * @param int $index The zero-indexed number of the argument to return * - * @see Prophecy\Promise\ReturnArgumentPromise + * @see \Prophecy\Promise\ReturnArgumentPromise * * @return $this */ public function willReturnArgument($index = 0) { + if ($this->voidReturnType) { + throw new MethodProphecyException("The method \"$this->methodName\" has a void return type", $this); + } + return $this->will(new Promise\ReturnArgumentPromise($index)); } /** * Sets throw promise to the prophecy. * - * @see Prophecy\Promise\ThrowPromise + * @see \Prophecy\Promise\ThrowPromise * * @param string|\Exception $exception Exception class or instance * @@ -225,7 +243,7 @@ class MethodProphecy /** * Sets call prediction to the prophecy. * - * @see Prophecy\Prediction\CallPrediction + * @see \Prophecy\Prediction\CallPrediction * * @return $this */ @@ -237,7 +255,7 @@ class MethodProphecy /** * Sets no calls prediction to the prophecy. * - * @see Prophecy\Prediction\NoCallsPrediction + * @see \Prophecy\Prediction\NoCallsPrediction * * @return $this */ @@ -249,7 +267,7 @@ class MethodProphecy /** * Sets call times prediction to the prophecy. * - * @see Prophecy\Prediction\CallTimesPrediction + * @see \Prophecy\Prediction\CallTimesPrediction * * @param $count * @@ -282,7 +300,7 @@ class MethodProphecy )); } - if (null === $this->promise) { + if (null === $this->promise && !$this->voidReturnType) { $this->willReturn(); } @@ -306,7 +324,7 @@ class MethodProphecy /** * Checks call prediction. * - * @see Prophecy\Prediction\CallPrediction + * @see \Prophecy\Prediction\CallPrediction * * @return $this */ @@ -318,7 +336,7 @@ class MethodProphecy /** * Checks no calls prediction. * - * @see Prophecy\Prediction\NoCallsPrediction + * @see \Prophecy\Prediction\NoCallsPrediction * * @return $this */ @@ -330,7 +348,7 @@ class MethodProphecy /** * Checks no calls prediction. * - * @see Prophecy\Prediction\NoCallsPrediction + * @see \Prophecy\Prediction\NoCallsPrediction * @deprecated * * @return $this @@ -343,7 +361,7 @@ class MethodProphecy /** * Checks call times prediction. * - * @see Prophecy\Prediction\CallTimesPrediction + * @see \Prophecy\Prediction\CallTimesPrediction * * @param int $count * @@ -426,6 +444,14 @@ class MethodProphecy return $this->argumentsWildcard; } + /** + * @return bool + */ + public function hasReturnVoid() + { + return $this->voidReturnType; + } + private function bindToObjectProphecy() { if ($this->bound) { diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php index 49ed6a3f..50dd3f32 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php @@ -158,11 +158,12 @@ class ExportUtil return 'Array &' . $key; } + $array = $value; $key = $processed->add($value); $values = ''; - if (count($value) > 0) { - foreach ($value as $k => $v) { + if (count($array) > 0) { + foreach ($array as $k => $v) { $values .= sprintf( '%s %s => %s' . "\n", $whitespace, diff --git a/lib/composer/vendor/phpunit/php-code-coverage/CONTRIBUTING.md b/lib/composer/vendor/phpunit/php-code-coverage/.github/CONTRIBUTING.md similarity index 100% rename from lib/composer/vendor/phpunit/php-code-coverage/CONTRIBUTING.md rename to lib/composer/vendor/phpunit/php-code-coverage/.github/CONTRIBUTING.md diff --git a/lib/composer/vendor/phpunit/php-code-coverage/.github/ISSUE_TEMPLATE.md b/lib/composer/vendor/phpunit/php-code-coverage/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..dc8e3b02 --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,18 @@ +| Q | A +| --------------------------| --------------- +| php-code-coverage version | x.y.z +| PHP version | x.y.z +| Driver | Xdebug / PHPDBG +| Xdebug version (if used) | x.y.z +| Installation Method | Composer / PHPUnit PHAR +| Usage Method | PHPUnit / other +| PHPUnit version (if used) | x.y.z + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/.gitignore b/lib/composer/vendor/phpunit/php-code-coverage/.gitignore index 1f3de0e3..603bc9e8 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/.gitignore +++ b/lib/composer/vendor/phpunit/php-code-coverage/.gitignore @@ -1,12 +1,6 @@ -build/api -build/code-browser -build/coverage -build/logs -build/pdepend -cache.properties /tests/_files/tmp /vendor /composer.lock -/composer.phar /.idea /.php_cs.cache + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/.php_cs b/lib/composer/vendor/phpunit/php-code-coverage/.php_cs index de5cde18..cb77f99f 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/.php_cs +++ b/lib/composer/vendor/phpunit/php-code-coverage/.php_cs @@ -1,69 +1,87 @@ files() - ->in('src') - ->in('tests') - ->exclude('_files') - ->name('*.php'); +$header = <<<'EOF' +This file is part of the php-code-coverage package. -return Symfony\CS\Config\Config::create() - ->setUsingCache(true) - ->level(\Symfony\CS\FixerInterface::NONE_LEVEL) - ->fixers( - array( - 'align_double_arrow', - 'align_equals', - 'braces', - 'concat_with_spaces', - 'duplicate_semicolon', - 'elseif', - 'empty_return', - 'encoding', - 'eof_ending', - 'extra_empty_lines', - 'function_call_space', - 'function_declaration', - 'indentation', - 'join_function', - 'line_after_namespace', - 'linefeed', - 'list_commas', - 'lowercase_constants', - 'lowercase_keywords', - 'method_argument_space', - 'multiple_use', - 'namespace_no_leading_whitespace', - 'no_blank_lines_after_class_opening', - 'no_empty_lines_after_phpdocs', - 'parenthesis', - 'php_closing_tag', - 'phpdoc_indent', - 'phpdoc_no_access', - 'phpdoc_no_empty_return', - 'phpdoc_no_package', - 'phpdoc_params', - 'phpdoc_scalar', - 'phpdoc_separation', - 'phpdoc_to_comment', - 'phpdoc_trim', - 'phpdoc_types', - 'phpdoc_var_without_name', - 'remove_lines_between_uses', - 'return', - 'self_accessor', - 'short_array_syntax', - 'short_tag', - 'single_line_after_imports', - 'single_quote', - 'spaces_before_semicolon', - 'spaces_cast', - 'ternary_spaces', - 'trailing_spaces', - 'trim_array_spaces', - 'unused_use', - 'visibility', - 'whitespacy_lines' - ) +(c) Sebastian Bergmann + +For the full copyright and license information, please view the LICENSE +file that was distributed with this source code. +EOF; + +return PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setRules( + [ + 'array_syntax' => ['syntax' => 'short'], + 'binary_operator_spaces' => [ + 'align_double_arrow' => true, + 'align_equals' => true + ], + 'blank_line_after_namespace' => true, + 'blank_line_before_statement' => [ + 'statements' => [ + 'break', + 'continue', + 'return', + 'throw', + 'try', + ], + ], + 'braces' => true, + 'cast_spaces' => true, + 'concat_space' => ['spacing' => 'one'], + 'elseif' => true, + 'encoding' => true, + 'full_opening_tag' => true, + 'function_declaration' => true, + 'header_comment' => ['header' => $header, 'separate' => 'none'], + 'indentation_type' => true, + 'line_ending' => true, + 'lowercase_constants' => true, + 'lowercase_keywords' => true, + 'method_argument_space' => true, + 'native_function_invocation' => true, + 'no_alias_functions' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_closing_tag' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_consecutive_blank_lines' => true, + 'no_leading_namespace_whitespace' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_whitespace' => true, + 'no_unused_imports' => true, + 'no_whitespace_in_blank_line' => true, + 'ordered_imports' => true, + 'phpdoc_align' => true, + 'phpdoc_indent' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_empty_return' => true, + 'phpdoc_no_package' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => true, + 'phpdoc_to_comment' => true, + 'phpdoc_trim' => true, + 'phpdoc_types' => true, + 'phpdoc_var_without_name' => true, + 'self_accessor' => true, + 'simplified_null_return' => true, + 'single_blank_line_at_eof' => true, + 'single_import_per_statement' => true, + 'single_line_after_imports' => true, + 'single_quote' => true, + 'ternary_operator_spaces' => true, + 'trim_array_spaces' => true, + 'visibility_required' => true, + ] ) - ->finder($finder); - + ->setFinder( + PhpCsFixer\Finder::create() + ->files() + ->in(__DIR__ . '/src') + ->name('*.php') + ); diff --git a/lib/composer/vendor/phpunit/php-code-coverage/.travis.yml b/lib/composer/vendor/phpunit/php-code-coverage/.travis.yml index be89e194..b6dfe62d 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/.travis.yml +++ b/lib/composer/vendor/phpunit/php-code-coverage/.travis.yml @@ -1,21 +1,39 @@ language: php -php: - - 5.6 - - 7.0 - - nightly - sudo: false +php: + - 7.0 + - 7.1 + - 7.2 + - master + +matrix: + allow_failures: + - php: master + fast_finish: true + +env: + matrix: + - DEPENDENCIES="high" + - DEPENDENCIES="low" + global: + - DEFAULT_COMPOSER_FLAGS="--no-interaction --no-ansi --no-progress --no-suggest" + before_install: - - composer self-update + - composer self-update + - composer clear-cache install: - - travis_retry composer install --no-interaction --prefer-source + - if [[ "$DEPENDENCIES" = 'high' ]]; then travis_retry composer update $DEFAULT_COMPOSER_FLAGS; fi + - if [[ "$DEPENDENCIES" = 'low' ]]; then travis_retry composer update $DEFAULT_COMPOSER_FLAGS --prefer-lowest; fi script: + - if [[ "$DRIVER" = 'phpdbg' ]]; then phpdbg -qrr vendor/bin/phpunit --coverage-clover=coverage.xml; fi + - if [[ "$DRIVER" = 'xdebug' ]]; then vendor/bin/phpunit --coverage-clover=coverage.xml; fi - - vendor/bin/phpunit --configuration build +after_success: + - bash <(curl -s https://codecov.io/bash) notifications: email: false diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-4.0.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-4.0.md index b085d46b..30df0102 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-4.0.md +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-4.0.md @@ -2,6 +2,41 @@ All notable changes of the PHP_CodeCoverage 4.0 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. +## [4.0.8] - 2017-04-02 + +* Fixed [#515](https://github.com/sebastianbergmann/php-code-coverage/pull/515): Wrong use of recursive iterator causing duplicate entries in XML coverage report + +## [4.0.7] - 2017-03-01 + +### Changed + +* Cleaned up requirements in `composer.json` + +## [4.0.6] - 2017-02-23 + +### Changed + +* Added support for `phpunit/php-token-stream` 2.0 +* Updated HTML report assets + +## [4.0.5] - 2017-01-20 + +### Fixed + +* Fixed formatting of executed lines percentage for classes in file view + +## [4.0.4] - 2016-12-20 + +### Changed + +* Implemented [#432](https://github.com/sebastianbergmann/php-code-coverage/issues/432): Change how files with no executable lines are displayed in the HTML report + +## [4.0.3] - 2016-11-28 + +### Changed + +* The check for unintentionally covered code is no longer performed for `@medium` and `@large` tests + ## [4.0.2] - 2016-11-01 ### Fixed @@ -20,6 +55,12 @@ All notable changes of the PHP_CodeCoverage 4.0 release series are documented in * This component now uses namespaces +[4.0.8]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.7...4.0.8 +[4.0.7]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.6...4.0.7 +[4.0.6]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.5...4.0.6 +[4.0.5]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.4...4.0.5 +[4.0.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.3...4.0.4 +[4.0.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.2...4.0.3 [4.0.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.1...4.0.2 [4.0.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.0...4.0.1 [4.0.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/3.3...4.0.0 diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.0.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.0.md new file mode 100644 index 00000000..a1f91529 --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.0.md @@ -0,0 +1,45 @@ +# Changes in PHP_CodeCoverage 5.0 + +All notable changes of the PHP_CodeCoverage 5.0 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## [5.0.4] - 2017-04-02 + +### Added + +* Added `SebastianBergmann\CodeCoverage\Version::id()` method + +### Fixed + +* Fixed [#515](https://github.com/sebastianbergmann/php-code-coverage/pull/515): Wrong use of recursive iterator causing duplicate entries in XML coverage report + +## [5.0.3] - 2017-03-06 + +### Fixed + +* Fixed [#451](https://github.com/sebastianbergmann/php-code-coverage/pull/451): Conflict between HTML report assets and directories named `css`, `fonts`, or `js` +* Fixed [#485](https://github.com/sebastianbergmann/php-code-coverage/issues/485): Large popover contents cannot be viewed + +## [5.0.2] - 2017-03-01 + +### Changed + +* Cleaned up requirements in `composer.json` + +## [5.0.1] - 2017-02-23 + +### Added + +* Implemented [#508](https://github.com/sebastianbergmann/php-code-coverage/pull/508): Support for HackLang's `ENUM` declaration + +## [5.0.0] - 2017-02-03 + +### Removed + +* This component is no longer supported on PHP 5 + +[5.0.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0.3...5.0.4 +[5.0.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0.2...5.0.3 +[5.0.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0.1...5.0.2 +[5.0.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0.0...5.0.1 +[5.0.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0...5.0.0 + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.1.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.1.md new file mode 100644 index 00000000..7cf70230 --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.1.md @@ -0,0 +1,19 @@ +# Changes in PHP_CodeCoverage 5.1 + +All notable changes of the PHP_CodeCoverage 5.1 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## [5.1.1] - 2017-04-12 + +## Fixed + +* Fixed [#420](https://github.com/sebastianbergmann/php-code-coverage/issues/420): Check for unexecuted covered or used code is too strict + +## [5.1.0] - 2017-04-07 + +## Changed + +* Implemented [#516](https://github.com/sebastianbergmann/php-code-coverage/pull/516): Add more information to XML code coverage report + +[5.1.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.1.0...5.1.1 +[5.1.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0...5.1.0 + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.2.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.2.md new file mode 100644 index 00000000..caf10135 --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.2.md @@ -0,0 +1,44 @@ +# Changes in PHP_CodeCoverage 5.2 + +All notable changes of the PHP_CodeCoverage 5.2 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## [5.2.4] - 2017-11-27 + +### Fixed + +* Fixed [#424](https://github.com/sebastianbergmann/php-code-coverage/issues/424): Rest of a function or method is ignored after an anonymous function +* Fixed [#455](https://github.com/sebastianbergmann/php-code-coverage/issues/455): Dashboard does not handle namespaced classes properly +* Fixed [#468](https://github.com/sebastianbergmann/php-code-coverage/issues/468): Global functions are not properly counted +* Fixed [#560](https://github.com/sebastianbergmann/php-code-coverage/issues/560): Uncovered whitelisted files are missing from the report + +## [5.2.3] - 2017-11-03 + +### Fixed + +* Fixed [#540](https://github.com/sebastianbergmann/php-code-coverage/issues/540): Missing attribute `type` in the CSS `` elements +* Fixed [#554](https://github.com/sebastianbergmann/php-code-coverage/pull/554): `Parameter must be an array or an object that implements Countable` + +## [5.2.2] - 2017-08-03 + +## Changed + +* Bumped required versions of dependencies + +## [5.2.1] - 2017-04-21 + +## Changed + +* Version 3 of `sebastian/environment` is now required + +## [5.2.0] - 2017-04-20 + +## Changed + +* Implemented [#518](https://github.com/sebastianbergmann/php-code-coverage/pull/518): Add more information to XML code coverage report + +[5.2.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2.3...5.2.4 +[5.2.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2.2...5.2.3 +[5.2.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2.1...5.2.2 +[5.2.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2.0...5.2.1 +[5.2.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.1...5.2.0 + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.3.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.3.md new file mode 100644 index 00000000..00b5fe2c --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.3.md @@ -0,0 +1,16 @@ +# Changes in PHP_CodeCoverage 5.3 + +All notable changes of the PHP_CodeCoverage 5.3 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## [5.3.0] - 2017-12-06 + +### Added + +* Added option to ignore the `forceCoversAnnotation="true"` setting for a single test + +### Fixed + +* Fixed [#564](https://github.com/sebastianbergmann/php-code-coverage/issues/564): `setDisableIgnoredLines(true)` disables more than it should + +[5.3.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2...5.3.0 + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/LICENSE b/lib/composer/vendor/phpunit/php-code-coverage/LICENSE index fcfa37e8..9b9787d3 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/LICENSE +++ b/lib/composer/vendor/phpunit/php-code-coverage/LICENSE @@ -1,6 +1,6 @@ PHP_CodeCoverage -Copyright (c) 2009-2015, Sebastian Bergmann . +Copyright (c) 2009-2017, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/lib/composer/vendor/phpunit/php-code-coverage/README.md b/lib/composer/vendor/phpunit/php-code-coverage/README.md index c01384b8..6c401ef4 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/README.md +++ b/lib/composer/vendor/phpunit/php-code-coverage/README.md @@ -1,25 +1,9 @@ [![Latest Stable Version](https://poser.pugx.org/phpunit/php-code-coverage/v/stable.png)](https://packagist.org/packages/phpunit/php-code-coverage) -[![Build Status](https://travis-ci.org/sebastianbergmann/php-code-coverage.svg?branch=master)](https://travis-ci.org/sebastianbergmann/php-code-coverage) +[![Build Status](https://travis-ci.org/sebastianbergmann/php-code-coverage.svg?branch=5.3)](https://travis-ci.org/sebastianbergmann/php-code-coverage) -# PHP_CodeCoverage +# SebastianBergmann\CodeCoverage -**PHP_CodeCoverage** is a library that provides collection, processing, and rendering functionality for PHP code coverage information. - -## Requirements - -PHP 5.6 is required but using the latest version of PHP is highly recommended. - -### PHP 5 - -[Xdebug](http://xdebug.org/) is the only source of raw code coverage data supported for PHP 5. Version 2.2.1 of Xdebug is required but using the latest version is highly recommended. - -### PHP 7 - -Version 2.4.0 (or later) of [Xdebug](http://xdebug.org/) as well as [phpdbg](http://phpdbg.com/docs) are supported sources of raw code coverage data for PHP 7. - -### HHVM - -A version of HHVM that implements the Xdebug API for code coverage (`xdebug_*_code_coverage()`) is required. +**SebastianBergmann\CodeCoverage** is a library that provides collection, processing, and rendering functionality for PHP code coverage information. ## Installation @@ -31,11 +15,16 @@ If you only need this library during development, for instance to run your proje composer require --dev phpunit/php-code-coverage -## Using the PHP_CodeCoverage API +## Using the SebastianBergmann\CodeCoverage API ```php filter()->addDirectoryToWhitelist('/path/to/src'); + $coverage->start(''); // ... diff --git a/lib/composer/vendor/phpunit/php-code-coverage/build.xml b/lib/composer/vendor/phpunit/php-code-coverage/build.xml index c335d158..40eeeec4 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/build.xml +++ b/lib/composer/vendor/phpunit/php-code-coverage/build.xml @@ -1,41 +1,19 @@ - - - - + + - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/composer.json b/lib/composer/vendor/phpunit/php-code-coverage/composer.json index 2dc52d82..ed87651f 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/composer.json +++ b/lib/composer/vendor/phpunit/php-code-coverage/composer.json @@ -12,31 +12,35 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "irc": "irc://irc.freenode.net/phpunit" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues" }, + "config": { + "optimize-autoloader": true, + "sort-packages": true + }, + "prefer-stable": true, "require": { - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-token-stream": "^1.4.2", - "phpunit/php-text-template": "~1.2", - "sebastian/code-unit-reverse-lookup": "~1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" + "php": "^7.0", + "ext-dom": "*", + "ext-xmlwriter": "*", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-token-stream": "^2.0.1", + "phpunit/php-text-template": "^1.2.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": "^5.4", - "ext-xdebug": ">=2.1.4" + "phpunit/phpunit": "^6.0" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.5.5" }, "autoload": { "classmap": [ @@ -45,7 +49,7 @@ }, "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "5.3.x-dev" } } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/phpunit.xml b/lib/composer/vendor/phpunit/php-code-coverage/phpunit.xml new file mode 100644 index 00000000..37e22199 --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/phpunit.xml @@ -0,0 +1,21 @@ + + + + tests/tests + + + + + src + + + + + + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/CodeCoverage.php b/lib/composer/vendor/phpunit/php-code-coverage/src/CodeCoverage.php index 49332e34..f3e9eaaf 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/CodeCoverage.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/CodeCoverage.php @@ -10,10 +10,12 @@ namespace SebastianBergmann\CodeCoverage; +use PHPUnit\Framework\TestCase; +use PHPUnit\Runner\PhptTestCase; use SebastianBergmann\CodeCoverage\Driver\Driver; -use SebastianBergmann\CodeCoverage\Driver\Xdebug; use SebastianBergmann\CodeCoverage\Driver\HHVM; use SebastianBergmann\CodeCoverage\Driver\PHPDBG; +use SebastianBergmann\CodeCoverage\Driver\Xdebug; use SebastianBergmann\CodeCoverage\Node\Builder; use SebastianBergmann\CodeCoverage\Node\Directory; use SebastianBergmann\CodeUnitReverseLookup\Wizard; @@ -127,6 +129,11 @@ class CodeCoverage */ private $shouldCheckForDeadAndUnused = true; + /** + * @var Directory + */ + private $report; + /** * Constructor. * @@ -158,9 +165,13 @@ class CodeCoverage */ public function getReport() { - $builder = new Builder; + if ($this->report === null) { + $builder = new Builder; - return $builder->build($this); + $this->report = $builder->build($this); + } + + return $this->report; } /** @@ -172,6 +183,7 @@ class CodeCoverage $this->currentId = null; $this->data = []; $this->tests = []; + $this->report = null; } /** @@ -208,7 +220,8 @@ class CodeCoverage */ public function setData(array $data) { - $this->data = $data; + $this->data = $data; + $this->report = null; } /** @@ -241,7 +254,7 @@ class CodeCoverage */ public function start($id, $clear = false) { - if (!is_bool($clear)) { + if (!\is_bool($clear)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -267,21 +280,23 @@ class CodeCoverage * @param bool $append * @param mixed $linesToBeCovered * @param array $linesToBeUsed + * @param bool $ignoreForceCoversAnnotation * * @return array * + * @throws \SebastianBergmann\CodeCoverage\RuntimeException * @throws InvalidArgumentException */ - public function stop($append = true, $linesToBeCovered = [], array $linesToBeUsed = []) + public function stop($append = true, $linesToBeCovered = [], array $linesToBeUsed = [], $ignoreForceCoversAnnotation = false) { - if (!is_bool($append)) { + if (!\is_bool($append)) { throw InvalidArgumentException::create( 1, 'boolean' ); } - if (!is_array($linesToBeCovered) && $linesToBeCovered !== false) { + if (!\is_array($linesToBeCovered) && $linesToBeCovered !== false) { throw InvalidArgumentException::create( 2, 'array or false' @@ -289,7 +304,7 @@ class CodeCoverage } $data = $this->driver->stop(); - $this->append($data, null, $append, $linesToBeCovered, $linesToBeUsed); + $this->append($data, null, $append, $linesToBeCovered, $linesToBeUsed, $ignoreForceCoversAnnotation); $this->currentId = null; @@ -304,10 +319,16 @@ class CodeCoverage * @param bool $append * @param mixed $linesToBeCovered * @param array $linesToBeUsed + * @param bool $ignoreForceCoversAnnotation * + * @throws \SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException + * @throws \SebastianBergmann\CodeCoverage\MissingCoversAnnotationException + * @throws \SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException + * @throws \ReflectionException + * @throws \SebastianBergmann\CodeCoverage\InvalidArgumentException * @throws RuntimeException */ - public function append(array $data, $id = null, $append = true, $linesToBeCovered = [], array $linesToBeUsed = []) + public function append(array $data, $id = null, $append = true, $linesToBeCovered = [], array $linesToBeUsed = [], $ignoreForceCoversAnnotation = false) { if ($id === null) { $id = $this->currentId; @@ -325,11 +346,12 @@ class CodeCoverage return; } - if ($id != 'UNCOVERED_FILES_FROM_WHITELIST') { + if ($id !== 'UNCOVERED_FILES_FROM_WHITELIST') { $this->applyCoversAnnotationFilter( $data, $linesToBeCovered, - $linesToBeUsed + $linesToBeUsed, + $ignoreForceCoversAnnotation ); } @@ -340,20 +362,20 @@ class CodeCoverage $size = 'unknown'; $status = null; - if ($id instanceof \PHPUnit_Framework_TestCase) { + if ($id instanceof TestCase) { $_size = $id->getSize(); - if ($_size == \PHPUnit_Util_Test::SMALL) { + if ($_size === \PHPUnit\Util\Test::SMALL) { $size = 'small'; - } elseif ($_size == \PHPUnit_Util_Test::MEDIUM) { + } elseif ($_size === \PHPUnit\Util\Test::MEDIUM) { $size = 'medium'; - } elseif ($_size == \PHPUnit_Util_Test::LARGE) { + } elseif ($_size === \PHPUnit\Util\Test::LARGE) { $size = 'large'; } $status = $id->getStatus(); - $id = get_class($id) . '::' . $id->getName(); - } elseif ($id instanceof \PHPUnit_Extensions_PhptTestCase) { + $id = \get_class($id) . '::' . $id->getName(); + } elseif ($id instanceof PhptTestCase) { $size = 'large'; $id = $id->getName(); } @@ -366,13 +388,15 @@ class CodeCoverage } foreach ($lines as $k => $v) { - if ($v == Driver::LINE_EXECUTED) { - if (empty($this->data[$file][$k]) || !in_array($id, $this->data[$file][$k])) { + if ($v === Driver::LINE_EXECUTED) { + if (empty($this->data[$file][$k]) || !\in_array($id, $this->data[$file][$k])) { $this->data[$file][$k][] = $id; } } } } + + $this->report = null; } /** @@ -380,10 +404,10 @@ class CodeCoverage * * @param CodeCoverage $that */ - public function merge(CodeCoverage $that) + public function merge(self $that) { $this->filter->setWhitelistedFiles( - array_merge($this->filter->getWhitelistedFiles(), $that->filter()->getWhitelistedFiles()) + \array_merge($this->filter->getWhitelistedFiles(), $that->filter()->getWhitelistedFiles()) ); foreach ($that->data as $file => $lines) { @@ -400,15 +424,16 @@ class CodeCoverage if (!isset($this->data[$file][$line])) { $this->data[$file][$line] = $data; } else { - $this->data[$file][$line] = array_unique( - array_merge($this->data[$file][$line], $data) + $this->data[$file][$line] = \array_unique( + \array_merge($this->data[$file][$line], $data) ); } } } } - $this->tests = array_merge($this->tests, $that->getTests()); + $this->tests = \array_merge($this->tests, $that->getTests()); + $this->report = null; } /** @@ -418,7 +443,7 @@ class CodeCoverage */ public function setCacheTokens($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -443,7 +468,7 @@ class CodeCoverage */ public function setCheckForUnintentionallyCoveredCode($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -460,7 +485,7 @@ class CodeCoverage */ public function setForceCoversAnnotation($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -477,7 +502,7 @@ class CodeCoverage */ public function setCheckForMissingCoversAnnotation($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -494,7 +519,7 @@ class CodeCoverage */ public function setCheckForUnexecutedCoveredCode($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -522,7 +547,7 @@ class CodeCoverage */ public function setAddUncoveredFilesFromWhitelist($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -539,7 +564,7 @@ class CodeCoverage */ public function setProcessUncoveredFilesFromWhitelist($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -556,7 +581,7 @@ class CodeCoverage */ public function setDisableIgnoredLines($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -573,7 +598,7 @@ class CodeCoverage */ public function setIgnoreDeprecatedCode($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -597,14 +622,17 @@ class CodeCoverage * @param array $data * @param mixed $linesToBeCovered * @param array $linesToBeUsed + * @param bool $ignoreForceCoversAnnotation * + * @throws \SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException + * @throws \ReflectionException * @throws MissingCoversAnnotationException * @throws UnintentionallyCoveredCodeException */ - private function applyCoversAnnotationFilter(array &$data, $linesToBeCovered, array $linesToBeUsed) + private function applyCoversAnnotationFilter(array &$data, $linesToBeCovered, array $linesToBeUsed, $ignoreForceCoversAnnotation) { if ($linesToBeCovered === false || - ($this->forceCoversAnnotation && empty($linesToBeCovered))) { + ($this->forceCoversAnnotation && empty($linesToBeCovered) && !$ignoreForceCoversAnnotation)) { if ($this->checkForMissingCoversAnnotation) { throw new MissingCoversAnnotationException; } @@ -618,27 +646,21 @@ class CodeCoverage return; } - if ($this->checkForUnintentionallyCoveredCode) { - $this->performUnintentionallyCoveredCodeCheck( - $data, - $linesToBeCovered, - $linesToBeUsed - ); + if ($this->checkForUnintentionallyCoveredCode && + (!$this->currentId instanceof TestCase || + (!$this->currentId->isMedium() && !$this->currentId->isLarge()))) { + $this->performUnintentionallyCoveredCodeCheck($data, $linesToBeCovered, $linesToBeUsed); } if ($this->checkForUnexecutedCoveredCode) { $this->performUnexecutedCoveredCodeCheck($data, $linesToBeCovered, $linesToBeUsed); } - $data = array_intersect_key($data, $linesToBeCovered); + $data = \array_intersect_key($data, $linesToBeCovered); - foreach (array_keys($data) as $filename) { - $_linesToBeCovered = array_flip($linesToBeCovered[$filename]); - - $data[$filename] = array_intersect_key( - $data[$filename], - $_linesToBeCovered - ); + foreach (\array_keys($data) as $filename) { + $_linesToBeCovered = \array_flip($linesToBeCovered[$filename]); + $data[$filename] = \array_intersect_key($data[$filename], $_linesToBeCovered); } } @@ -649,7 +671,7 @@ class CodeCoverage */ private function applyListsFilter(array &$data) { - foreach (array_keys($data) as $filename) { + foreach (\array_keys($data) as $filename) { if ($this->filter->isFiltered($filename)) { unset($data[$filename]); } @@ -660,10 +682,12 @@ class CodeCoverage * Applies the "ignored lines" filtering. * * @param array $data + * + * @throws \SebastianBergmann\CodeCoverage\InvalidArgumentException */ private function applyIgnoredLinesFilter(array &$data) { - foreach (array_keys($data) as $filename) { + foreach (\array_keys($data) as $filename) { if (!$this->filter->isFile($filename)) { continue; } @@ -680,11 +704,11 @@ class CodeCoverage private function initializeFilesThatAreSeenTheFirstTime(array $data) { foreach ($data as $file => $lines) { - if ($this->filter->isFile($file) && !isset($this->data[$file])) { + if (!isset($this->data[$file]) && $this->filter->isFile($file)) { $this->data[$file] = []; foreach ($lines as $k => $v) { - $this->data[$file][$k] = $v == -2 ? null : []; + $this->data[$file][$k] = $v === -2 ? null : []; } } } @@ -696,24 +720,22 @@ class CodeCoverage private function addUncoveredFilesFromWhitelist() { $data = []; - $uncoveredFiles = array_diff( + $uncoveredFiles = \array_diff( $this->filter->getWhitelist(), - array_keys($this->data) + \array_keys($this->data) ); foreach ($uncoveredFiles as $uncoveredFile) { - if (!file_exists($uncoveredFile)) { + if (!\file_exists($uncoveredFile)) { continue; } - if (!$this->processUncoveredFilesFromWhitelist) { - $data[$uncoveredFile] = []; + $data[$uncoveredFile] = []; - $lines = count(file($uncoveredFile)); + $lines = \count(\file($uncoveredFile)); - for ($i = 1; $i <= $lines; $i++) { - $data[$uncoveredFile][$i] = Driver::LINE_NOT_EXECUTED; - } + for ($i = 1; $i <= $lines; $i++) { + $data[$uncoveredFile][$i] = Driver::LINE_NOT_EXECUTED; } } @@ -731,168 +753,185 @@ class CodeCoverage */ private function getLinesToBeIgnored($filename) { - if (!is_string($filename)) { + if (!\is_string($filename)) { throw InvalidArgumentException::create( 1, 'string' ); } - if (!isset($this->ignoredLines[$filename])) { - $this->ignoredLines[$filename] = []; + if (isset($this->ignoredLines[$filename])) { + return $this->ignoredLines[$filename]; + } - if ($this->disableIgnoredLines) { - return $this->ignoredLines[$filename]; + $this->ignoredLines[$filename] = []; + + $lines = \file($filename); + + foreach ($lines as $index => $line) { + if (!\trim($line)) { + $this->ignoredLines[$filename][] = $index + 1; } + } - $ignore = false; - $stop = false; - $lines = file($filename); - $numLines = count($lines); + if ($this->cacheTokens) { + $tokens = \PHP_Token_Stream_CachingFactory::get($filename); + } else { + $tokens = new \PHP_Token_Stream($filename); + } - foreach ($lines as $index => $line) { - if (!trim($line)) { - $this->ignoredLines[$filename][] = $index + 1; - } + foreach ($tokens->getInterfaces() as $interface) { + $interfaceStartLine = $interface['startLine']; + $interfaceEndLine = $interface['endLine']; + + foreach (\range($interfaceStartLine, $interfaceEndLine) as $line) { + $this->ignoredLines[$filename][] = $line; } + } - if ($this->cacheTokens) { - $tokens = \PHP_Token_Stream_CachingFactory::get($filename); - } else { - $tokens = new \PHP_Token_Stream($filename); - } + foreach (\array_merge($tokens->getClasses(), $tokens->getTraits()) as $classOrTrait) { + $classOrTraitStartLine = $classOrTrait['startLine']; + $classOrTraitEndLine = $classOrTrait['endLine']; - $classes = array_merge($tokens->getClasses(), $tokens->getTraits()); - $tokens = $tokens->tokens(); - - foreach ($tokens as $token) { - switch (get_class($token)) { - case 'PHP_Token_COMMENT': - case 'PHP_Token_DOC_COMMENT': - $_token = trim($token); - $_line = trim($lines[$token->getLine() - 1]); - - if ($_token == '// @codeCoverageIgnore' || - $_token == '//@codeCoverageIgnore') { - $ignore = true; - $stop = true; - } elseif ($_token == '// @codeCoverageIgnoreStart' || - $_token == '//@codeCoverageIgnoreStart') { - $ignore = true; - } elseif ($_token == '// @codeCoverageIgnoreEnd' || - $_token == '//@codeCoverageIgnoreEnd') { - $stop = true; - } - - if (!$ignore) { - $start = $token->getLine(); - $end = $start + substr_count($token, "\n"); - - // Do not ignore the first line when there is a token - // before the comment - if (0 !== strpos($_token, $_line)) { - $start++; - } - - for ($i = $start; $i < $end; $i++) { - $this->ignoredLines[$filename][] = $i; - } - - // A DOC_COMMENT token or a COMMENT token starting with "/*" - // does not contain the final \n character in its text - if (isset($lines[$i-1]) && 0 === strpos($_token, '/*') && '*/' === substr(trim($lines[$i-1]), -2)) { - $this->ignoredLines[$filename][] = $i; - } - } - break; - - case 'PHP_Token_INTERFACE': - case 'PHP_Token_TRAIT': - case 'PHP_Token_CLASS': - case 'PHP_Token_FUNCTION': - /* @var \PHP_Token_Interface $token */ - - $docblock = $token->getDocblock(); - - $this->ignoredLines[$filename][] = $token->getLine(); - - if (strpos($docblock, '@codeCoverageIgnore') || ($this->ignoreDeprecatedCode && strpos($docblock, '@deprecated'))) { - $endLine = $token->getEndLine(); - - for ($i = $token->getLine(); $i <= $endLine; $i++) { - $this->ignoredLines[$filename][] = $i; - } - } elseif ($token instanceof \PHP_Token_INTERFACE || - $token instanceof \PHP_Token_TRAIT || - $token instanceof \PHP_Token_CLASS) { - if (empty($classes[$token->getName()]['methods'])) { - for ($i = $token->getLine(); - $i <= $token->getEndLine(); - $i++) { - $this->ignoredLines[$filename][] = $i; - } - } else { - $firstMethod = array_shift( - $classes[$token->getName()]['methods'] - ); - - do { - $lastMethod = array_pop( - $classes[$token->getName()]['methods'] - ); - } while ($lastMethod !== null && - substr($lastMethod['signature'], 0, 18) == 'anonymous function'); - - if ($lastMethod === null) { - $lastMethod = $firstMethod; - } - - for ($i = $token->getLine(); - $i < $firstMethod['startLine']; - $i++) { - $this->ignoredLines[$filename][] = $i; - } - - for ($i = $token->getEndLine(); - $i > $lastMethod['endLine']; - $i--) { - $this->ignoredLines[$filename][] = $i; - } - } - } - break; - - case 'PHP_Token_NAMESPACE': - $this->ignoredLines[$filename][] = $token->getEndLine(); - - // Intentional fallthrough - case 'PHP_Token_DECLARE': - case 'PHP_Token_OPEN_TAG': - case 'PHP_Token_CLOSE_TAG': - case 'PHP_Token_USE': - $this->ignoredLines[$filename][] = $token->getLine(); - break; + if (empty($classOrTrait['methods'])) { + foreach (\range($classOrTraitStartLine, $classOrTraitEndLine) as $line) { + $this->ignoredLines[$filename][] = $line; } - if ($ignore) { + continue; + } + + $firstMethod = \array_shift($classOrTrait['methods']); + $firstMethodStartLine = $firstMethod['startLine']; + $firstMethodEndLine = $firstMethod['endLine']; + $lastMethodEndLine = $firstMethodEndLine; + + do { + $lastMethod = \array_pop($classOrTrait['methods']); + } while ($lastMethod !== null && 0 === \strpos($lastMethod['signature'], 'anonymousFunction')); + + if ($lastMethod !== null) { + $lastMethodEndLine = $lastMethod['endLine']; + } + + foreach (\range($classOrTraitStartLine, $firstMethodStartLine) as $line) { + $this->ignoredLines[$filename][] = $line; + } + + foreach (\range($lastMethodEndLine + 1, $classOrTraitEndLine) as $line) { + $this->ignoredLines[$filename][] = $line; + } + } + + if ($this->disableIgnoredLines) { + $this->ignoredLines[$filename] = array_unique($this->ignoredLines[$filename]); + \sort($this->ignoredLines[$filename]); + + return $this->ignoredLines[$filename]; + } + + $ignore = false; + $stop = false; + + foreach ($tokens->tokens() as $token) { + switch (\get_class($token)) { + case \PHP_Token_COMMENT::class: + case \PHP_Token_DOC_COMMENT::class: + $_token = \trim($token); + $_line = \trim($lines[$token->getLine() - 1]); + + if ($_token === '// @codeCoverageIgnore' || + $_token === '//@codeCoverageIgnore') { + $ignore = true; + $stop = true; + } elseif ($_token === '// @codeCoverageIgnoreStart' || + $_token === '//@codeCoverageIgnoreStart') { + $ignore = true; + } elseif ($_token === '// @codeCoverageIgnoreEnd' || + $_token === '//@codeCoverageIgnoreEnd') { + $stop = true; + } + + if (!$ignore) { + $start = $token->getLine(); + $end = $start + \substr_count($token, "\n"); + + // Do not ignore the first line when there is a token + // before the comment + if (0 !== \strpos($_token, $_line)) { + $start++; + } + + for ($i = $start; $i < $end; $i++) { + $this->ignoredLines[$filename][] = $i; + } + + // A DOC_COMMENT token or a COMMENT token starting with "/*" + // does not contain the final \n character in its text + if (isset($lines[$i - 1]) && 0 === \strpos($_token, '/*') && '*/' === \substr(\trim($lines[$i - 1]), -2)) { + $this->ignoredLines[$filename][] = $i; + } + } + + break; + + case \PHP_Token_INTERFACE::class: + case \PHP_Token_TRAIT::class: + case \PHP_Token_CLASS::class: + case \PHP_Token_FUNCTION::class: + /* @var \PHP_Token_Interface $token */ + + $docblock = $token->getDocblock(); + $this->ignoredLines[$filename][] = $token->getLine(); - if ($stop) { - $ignore = false; - $stop = false; + if (\strpos($docblock, '@codeCoverageIgnore') || ($this->ignoreDeprecatedCode && \strpos($docblock, '@deprecated'))) { + $endLine = $token->getEndLine(); + + for ($i = $token->getLine(); $i <= $endLine; $i++) { + $this->ignoredLines[$filename][] = $i; + } } - } + + break; + + case \PHP_Token_ENUM::class: + $this->ignoredLines[$filename][] = $token->getLine(); + + break; + + case \PHP_Token_NAMESPACE::class: + $this->ignoredLines[$filename][] = $token->getEndLine(); + + // Intentional fallthrough + case \PHP_Token_DECLARE::class: + case \PHP_Token_OPEN_TAG::class: + case \PHP_Token_CLOSE_TAG::class: + case \PHP_Token_USE::class: + $this->ignoredLines[$filename][] = $token->getLine(); + + break; } - $this->ignoredLines[$filename][] = $numLines + 1; + if ($ignore) { + $this->ignoredLines[$filename][] = $token->getLine(); - $this->ignoredLines[$filename] = array_unique( - $this->ignoredLines[$filename] - ); - - sort($this->ignoredLines[$filename]); + if ($stop) { + $ignore = false; + $stop = false; + } + } } + $this->ignoredLines[$filename][] = \count($lines) + 1; + + $this->ignoredLines[$filename] = \array_unique( + $this->ignoredLines[$filename] + ); + + $this->ignoredLines[$filename] = array_unique($this->ignoredLines[$filename]); + \sort($this->ignoredLines[$filename]); + return $this->ignoredLines[$filename]; } @@ -901,6 +940,7 @@ class CodeCoverage * @param array $linesToBeCovered * @param array $linesToBeUsed * + * @throws \ReflectionException * @throws UnintentionallyCoveredCodeException */ private function performUnintentionallyCoveredCodeCheck(array &$data, array $linesToBeCovered, array $linesToBeUsed) @@ -914,7 +954,7 @@ class CodeCoverage foreach ($data as $file => $_data) { foreach ($_data as $line => $flag) { - if ($flag == 1 && !isset($allowedLines[$file][$line])) { + if ($flag === 1 && !isset($allowedLines[$file][$line])) { $unintentionallyCoveredUnits[] = $this->wizard->lookup($file, $line); } } @@ -938,30 +978,24 @@ class CodeCoverage */ private function performUnexecutedCoveredCodeCheck(array &$data, array $linesToBeCovered, array $linesToBeUsed) { - $expectedLines = $this->getAllowedLines( - $linesToBeCovered, - $linesToBeUsed - ); + $executedCodeUnits = $this->coverageToCodeUnits($data); + $message = ''; - foreach ($data as $file => $_data) { - foreach (array_keys($_data) as $line) { - if (!isset($expectedLines[$file][$line])) { - continue; - } - - unset($expectedLines[$file][$line]); + foreach ($this->linesToCodeUnits($linesToBeCovered) as $codeUnit) { + if (!\in_array($codeUnit, $executedCodeUnits)) { + $message .= \sprintf( + '- %s is expected to be executed (@covers) but was not executed' . "\n", + $codeUnit + ); } } - $message = ''; - - foreach ($expectedLines as $file => $lines) { - if (empty($lines)) { - continue; - } - - foreach (array_keys($lines) as $line) { - $message .= sprintf('- %s:%d' . PHP_EOL, $file, $line); + foreach ($this->linesToCodeUnits($linesToBeUsed) as $codeUnit) { + if (!\in_array($codeUnit, $executedCodeUnits)) { + $message .= \sprintf( + '- %s is expected to be executed (@uses) but was not executed' . "\n", + $codeUnit + ); } } @@ -980,31 +1014,31 @@ class CodeCoverage { $allowedLines = []; - foreach (array_keys($linesToBeCovered) as $file) { + foreach (\array_keys($linesToBeCovered) as $file) { if (!isset($allowedLines[$file])) { $allowedLines[$file] = []; } - $allowedLines[$file] = array_merge( + $allowedLines[$file] = \array_merge( $allowedLines[$file], $linesToBeCovered[$file] ); } - foreach (array_keys($linesToBeUsed) as $file) { + foreach (\array_keys($linesToBeUsed) as $file) { if (!isset($allowedLines[$file])) { $allowedLines[$file] = []; } - $allowedLines[$file] = array_merge( + $allowedLines[$file] = \array_merge( $allowedLines[$file], $linesToBeUsed[$file] ); } - foreach (array_keys($allowedLines) as $file) { - $allowedLines[$file] = array_flip( - array_unique($allowedLines[$file]) + foreach (\array_keys($allowedLines) as $file) { + $allowedLines[$file] = \array_flip( + \array_unique($allowedLines[$file]) ); } @@ -1026,27 +1060,31 @@ class CodeCoverage if ($runtime->isHHVM()) { return new HHVM; - } elseif ($runtime->isPHPDBG()) { - return new PHPDBG; - } else { - return new Xdebug; } + + if ($runtime->isPHPDBG()) { + return new PHPDBG; + } + + return new Xdebug; } /** * @param array $unintentionallyCoveredUnits * * @return array + * + * @throws \ReflectionException */ private function processUnintentionallyCoveredUnits(array $unintentionallyCoveredUnits) { - $unintentionallyCoveredUnits = array_unique($unintentionallyCoveredUnits); - sort($unintentionallyCoveredUnits); + $unintentionallyCoveredUnits = \array_unique($unintentionallyCoveredUnits); + \sort($unintentionallyCoveredUnits); - foreach (array_keys($unintentionallyCoveredUnits) as $k => $v) { - $unit = explode('::', $unintentionallyCoveredUnits[$k]); + foreach (\array_keys($unintentionallyCoveredUnits) as $k => $v) { + $unit = \explode('::', $unintentionallyCoveredUnits[$k]); - if (count($unit) != 2) { + if (\count($unit) !== 2) { continue; } @@ -1055,17 +1093,20 @@ class CodeCoverage foreach ($this->unintentionallyCoveredSubclassesWhitelist as $whitelisted) { if ($class->isSubclassOf($whitelisted)) { unset($unintentionallyCoveredUnits[$k]); + break; } } } - return array_values($unintentionallyCoveredUnits); + return \array_values($unintentionallyCoveredUnits); } /** * If we are processing uncovered files from whitelist, * we can initialize the data before we start to speed up the tests + * + * @throws \SebastianBergmann\CodeCoverage\RuntimeException */ protected function initializeData() { @@ -1090,8 +1131,8 @@ class CodeCoverage continue; } - foreach (array_keys($fileCoverage) as $key) { - if ($fileCoverage[$key] == Driver::LINE_EXECUTED) { + foreach (\array_keys($fileCoverage) as $key) { + if ($fileCoverage[$key] === Driver::LINE_EXECUTED) { $fileCoverage[$key] = Driver::LINE_NOT_EXECUTED; } } @@ -1102,4 +1143,42 @@ class CodeCoverage $this->append($data, 'UNCOVERED_FILES_FROM_WHITELIST'); } } + + /** + * @param array $data + * + * @return array + */ + private function coverageToCodeUnits(array $data) + { + $codeUnits = []; + + foreach ($data as $filename => $lines) { + foreach ($lines as $line => $flag) { + if ($flag === 1) { + $codeUnits[] = $this->wizard->lookup($filename, $line); + } + } + } + + return \array_unique($codeUnits); + } + + /** + * @param array $data + * + * @return array + */ + private function linesToCodeUnits(array $data) + { + $codeUnits = []; + + foreach ($data as $filename => $lines) { + foreach ($lines as $line) { + $codeUnits[] = $this->wizard->lookup($filename, $line); + } + } + + return \array_unique($codeUnits); + } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/HHVM.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/HHVM.php index b35ea81b..e8cdc2a4 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/HHVM.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/HHVM.php @@ -24,6 +24,6 @@ class HHVM extends Xdebug */ public function start($determineUnusedAndDead = true) { - xdebug_start_code_coverage(); + \xdebug_start_code_coverage(); } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/PHPDBG.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/PHPDBG.php index 86cc8444..71b9559c 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/PHPDBG.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/PHPDBG.php @@ -30,7 +30,7 @@ class PHPDBG implements Driver ); } - if (!function_exists('phpdbg_start_oplog')) { + if (!\function_exists('phpdbg_start_oplog')) { throw new RuntimeException( 'This build of PHPDBG does not support code coverage' ); @@ -61,9 +61,9 @@ class PHPDBG implements Driver if ($fetchedLines == []) { $sourceLines = phpdbg_get_executable(); } else { - $newFiles = array_diff( - get_included_files(), - array_keys($fetchedLines) + $newFiles = \array_diff( + \get_included_files(), + \array_keys($fetchedLines) ); if ($newFiles) { @@ -81,7 +81,7 @@ class PHPDBG implements Driver } } - $fetchedLines = array_merge($fetchedLines, $sourceLines); + $fetchedLines = \array_merge($fetchedLines, $sourceLines); return $this->detectExecutedLines($fetchedLines, $dbgData); } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/Xdebug.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/Xdebug.php index 30099e05..208ae2be 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/Xdebug.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/Xdebug.php @@ -31,12 +31,12 @@ class Xdebug implements Driver */ public function __construct() { - if (!extension_loaded('xdebug')) { + if (!\extension_loaded('xdebug')) { throw new RuntimeException('This driver requires Xdebug'); } - if (version_compare(phpversion('xdebug'), '2.2.1', '>=') && - !ini_get('xdebug.coverage_enable')) { + if (\version_compare(\phpversion('xdebug'), '2.2.1', '>=') && + !\ini_get('xdebug.coverage_enable')) { throw new RuntimeException( 'xdebug.coverage_enable=On has to be set in php.ini' ); @@ -51,9 +51,9 @@ class Xdebug implements Driver public function start($determineUnusedAndDead = true) { if ($determineUnusedAndDead) { - xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); + \xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); } else { - xdebug_start_code_coverage(); + \xdebug_start_code_coverage(); } } @@ -64,8 +64,8 @@ class Xdebug implements Driver */ public function stop() { - $data = xdebug_get_code_coverage(); - xdebug_stop_code_coverage(); + $data = \xdebug_get_code_coverage(); + \xdebug_stop_code_coverage(); return $this->cleanup($data); } @@ -77,13 +77,13 @@ class Xdebug implements Driver */ private function cleanup(array $data) { - foreach (array_keys($data) as $file) { + foreach (\array_keys($data) as $file) { unset($data[$file][0]); - if (strpos($file, 'xdebug://debug-eval') !== 0 && file_exists($file)) { + if (\strpos($file, 'xdebug://debug-eval') !== 0 && \file_exists($file)) { $numLines = $this->getNumberOfLinesInFile($file); - foreach (array_keys($data[$file]) as $line) { + foreach (\array_keys($data[$file]) as $line) { if ($line > $numLines) { unset($data[$file][$line]); } @@ -102,10 +102,10 @@ class Xdebug implements Driver private function getNumberOfLinesInFile($file) { if (!isset($this->cacheNumLines[$file])) { - $buffer = file_get_contents($file); - $lines = substr_count($buffer, "\n"); + $buffer = \file_get_contents($file); + $lines = \substr_count($buffer, "\n"); - if (substr($buffer, -1) !== "\n") { + if (\substr($buffer, -1) !== "\n") { $lines++; } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php index 1733f6cb..1c632613 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php @@ -21,13 +21,13 @@ class InvalidArgumentException extends \InvalidArgumentException implements Exce */ public static function create($argument, $type, $value = null) { - $stack = debug_backtrace(0); + $stack = \debug_backtrace(0); return new self( - sprintf( + \sprintf( 'Argument #%d%sof %s::%s() must be a %s', $argument, - $value !== null ? ' (' . gettype($value) . '#' . $value . ')' : ' (No Value) ', + $value !== null ? ' (' . \gettype($value) . '#' . $value . ')' : ' (No Value) ', $stack[1]['class'], $stack[1]['function'], $type diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Filter.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Filter.php index 771a657a..3d99abb5 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Filter.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Filter.php @@ -46,7 +46,7 @@ class Filter */ public function addFileToWhitelist($filename) { - $this->whitelistedFiles[realpath($filename)] = true; + $this->whitelistedFiles[\realpath($filename)] = true; } /** @@ -85,7 +85,7 @@ class Filter */ public function removeFileFromWhitelist($filename) { - $filename = realpath($filename); + $filename = \realpath($filename); unset($this->whitelistedFiles[$filename]); } @@ -100,17 +100,17 @@ class Filter public function isFile($filename) { if ($filename == '-' || - strpos($filename, 'vfs://') === 0 || - strpos($filename, 'xdebug://debug-eval') !== false || - strpos($filename, 'eval()\'d code') !== false || - strpos($filename, 'runtime-created function') !== false || - strpos($filename, 'runkit created function') !== false || - strpos($filename, 'assert code') !== false || - strpos($filename, 'regexp code') !== false) { + \strpos($filename, 'vfs://') === 0 || + \strpos($filename, 'xdebug://debug-eval') !== false || + \strpos($filename, 'eval()\'d code') !== false || + \strpos($filename, 'runtime-created function') !== false || + \strpos($filename, 'runkit created function') !== false || + \strpos($filename, 'assert code') !== false || + \strpos($filename, 'regexp code') !== false) { return false; } - return file_exists($filename); + return \file_exists($filename); } /** @@ -126,7 +126,7 @@ class Filter return true; } - $filename = realpath($filename); + $filename = \realpath($filename); return !isset($this->whitelistedFiles[$filename]); } @@ -138,7 +138,7 @@ class Filter */ public function getWhitelist() { - return array_keys($this->whitelistedFiles); + return \array_keys($this->whitelistedFiles); } /** diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php index f3608058..e8f08cba 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php @@ -48,10 +48,10 @@ abstract class AbstractNode implements \Countable * @param string $name * @param AbstractNode $parent */ - public function __construct($name, AbstractNode $parent = null) + public function __construct($name, self $parent = null) { - if (substr($name, -1) == '/') { - $name = substr($name, 0, -1); + if (\substr($name, -1) == '/') { + $name = \substr($name, 0, -1); } $this->name = $name; @@ -80,7 +80,7 @@ abstract class AbstractNode implements \Countable $parentId = $parent->getId(); if ($parentId == 'index') { - $this->id = str_replace(':', '_', $this->name); + $this->id = \str_replace(':', '_', $this->name); } else { $this->id = $parentId . '/' . $this->name; } @@ -165,7 +165,7 @@ abstract class AbstractNode implements \Countable } /** - * Returns the percentage of traits that has been tested. + * Returns the percentage of classes and traits that has been tested. * * @param bool $asString * @@ -180,6 +180,22 @@ abstract class AbstractNode implements \Countable ); } + /** + * Returns the percentage of functions that has been tested. + * + * @param bool $asString + * + * @return int + */ + public function getTestedFunctionsPercent($asString = true) + { + return Util::percent( + $this->getNumTestedFunctions(), + $this->getNumFunctions(), + $asString + ); + } + /** * Returns the percentage of methods that has been tested. * @@ -196,6 +212,22 @@ abstract class AbstractNode implements \Countable ); } + /** + * Returns the percentage of functions and methods that has been tested. + * + * @param bool $asString + * + * @return int + */ + public function getTestedFunctionsAndMethodsPercent($asString = true) + { + return Util::percent( + $this->getNumTestedFunctionsAndMethods(), + $this->getNumFunctionsAndMethods(), + $asString + ); + } + /** * Returns the percentage of executed lines. * @@ -239,7 +271,37 @@ abstract class AbstractNode implements \Countable */ public function getClassesAndTraits() { - return array_merge($this->getClasses(), $this->getTraits()); + return \array_merge($this->getClasses(), $this->getTraits()); + } + + /** + * Returns the number of functions and methods. + * + * @return int + */ + public function getNumFunctionsAndMethods() + { + return $this->getNumFunctions() + $this->getNumMethods(); + } + + /** + * Returns the number of tested functions and methods. + * + * @return int + */ + public function getNumTestedFunctionsAndMethods() + { + return $this->getNumTestedFunctions() + $this->getNumTestedMethods(); + } + + /** + * Returns the functions and methods of this node. + * + * @return array + */ + public function getFunctionsAndMethods() + { + return \array_merge($this->getFunctions(), $this->getMethods()); } /** diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Builder.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Builder.php index 8a6a65c1..56541d57 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Builder.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Builder.php @@ -47,10 +47,10 @@ class Builder private function addItems(Directory $root, array $items, array $tests, $cacheTokens) { foreach ($items as $key => $value) { - if (substr($key, -2) == '/f') { - $key = substr($key, 0, -2); + if (\substr($key, -2) == '/f') { + $key = \substr($key, 0, -2); - if (file_exists($root->getPath() . DIRECTORY_SEPARATOR . $key)) { + if (\file_exists($root->getPath() . DIRECTORY_SEPARATOR . $key)) { $root->addFile($key, $value, $tests, $cacheTokens); } } else { @@ -109,9 +109,9 @@ class Builder $result = []; foreach ($files as $path => $file) { - $path = explode('/', $path); + $path = \explode('/', $path); $pointer = &$result; - $max = count($path); + $max = \count($path); for ($i = 0; $i < $max; $i++) { if ($i == ($max - 1)) { @@ -177,26 +177,26 @@ class Builder } $commonPath = ''; - $paths = array_keys($files); + $paths = \array_keys($files); - if (count($files) == 1) { - $commonPath = dirname($paths[0]) . '/'; - $files[basename($paths[0])] = $files[$paths[0]]; + if (\count($files) == 1) { + $commonPath = \dirname($paths[0]) . '/'; + $files[\basename($paths[0])] = $files[$paths[0]]; unset($files[$paths[0]]); return $commonPath; } - $max = count($paths); + $max = \count($paths); for ($i = 0; $i < $max; $i++) { // strip phar:// prefixes - if (strpos($paths[$i], 'phar://') === 0) { - $paths[$i] = substr($paths[$i], 7); - $paths[$i] = strtr($paths[$i], '/', DIRECTORY_SEPARATOR); + if (\strpos($paths[$i], 'phar://') === 0) { + $paths[$i] = \substr($paths[$i], 7); + $paths[$i] = \strtr($paths[$i], '/', DIRECTORY_SEPARATOR); } - $paths[$i] = explode(DIRECTORY_SEPARATOR, $paths[$i]); + $paths[$i] = \explode(DIRECTORY_SEPARATOR, $paths[$i]); if (empty($paths[$i][0])) { $paths[$i][0] = DIRECTORY_SEPARATOR; @@ -204,14 +204,15 @@ class Builder } $done = false; - $max = count($paths); + $max = \count($paths); while (!$done) { for ($i = 0; $i < $max - 1; $i++) { if (!isset($paths[$i][0]) || - !isset($paths[$i+1][0]) || - $paths[$i][0] != $paths[$i+1][0]) { + !isset($paths[$i + 1][0]) || + $paths[$i][0] != $paths[$i + 1][0]) { $done = true; + break; } } @@ -224,21 +225,21 @@ class Builder } for ($i = 0; $i < $max; $i++) { - array_shift($paths[$i]); + \array_shift($paths[$i]); } } } - $original = array_keys($files); - $max = count($original); + $original = \array_keys($files); + $max = \count($original); for ($i = 0; $i < $max; $i++) { - $files[implode('/', $paths[$i])] = $files[$original[$i]]; + $files[\implode('/', $paths[$i])] = $files[$original[$i]]; unset($files[$original[$i]]); } - ksort($files); + \ksort($files); - return substr($commonPath, 0, -1); + return \substr($commonPath, 0, -1); } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Directory.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Directory.php index 6a9f28db..3c95d289 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Directory.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Directory.php @@ -118,7 +118,7 @@ class Directory extends AbstractNode implements \IteratorAggregate $this->numFiles = 0; foreach ($this->children as $child) { - $this->numFiles += count($child); + $this->numFiles += \count($child); } } @@ -150,7 +150,7 @@ class Directory extends AbstractNode implements \IteratorAggregate $directory = new self($name, $this); $this->children[] = $directory; - $this->directories[] = &$this->children[count($this->children) - 1]; + $this->directories[] = &$this->children[\count($this->children) - 1]; return $directory; } @@ -178,7 +178,7 @@ class Directory extends AbstractNode implements \IteratorAggregate ); $this->children[] = $file; - $this->files[] = &$this->children[count($this->children) - 1]; + $this->files[] = &$this->children[\count($this->children) - 1]; $this->numExecutableLines = -1; $this->numExecutedLines = -1; @@ -227,7 +227,7 @@ class Directory extends AbstractNode implements \IteratorAggregate $this->classes = []; foreach ($this->children as $child) { - $this->classes = array_merge( + $this->classes = \array_merge( $this->classes, $child->getClasses() ); @@ -248,7 +248,7 @@ class Directory extends AbstractNode implements \IteratorAggregate $this->traits = []; foreach ($this->children as $child) { - $this->traits = array_merge( + $this->traits = \array_merge( $this->traits, $child->getTraits() ); @@ -269,7 +269,7 @@ class Directory extends AbstractNode implements \IteratorAggregate $this->functions = []; foreach ($this->children as $child) { - $this->functions = array_merge( + $this->functions = \array_merge( $this->functions, $child->getFunctions() ); @@ -292,8 +292,8 @@ class Directory extends AbstractNode implements \IteratorAggregate foreach ($this->children as $child) { $linesOfCode = $child->getLinesOfCode(); - $this->linesOfCode['loc'] += $linesOfCode['loc']; - $this->linesOfCode['cloc'] += $linesOfCode['cloc']; + $this->linesOfCode['loc'] += $linesOfCode['loc']; + $this->linesOfCode['cloc'] += $linesOfCode['cloc']; $this->linesOfCode['ncloc'] += $linesOfCode['ncloc']; } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/File.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/File.php index b94f2076..7a8587f0 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/File.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/File.php @@ -60,13 +60,23 @@ class File extends AbstractNode /** * @var int */ - private $numTestedTraits = 0; + private $numClasses = null; /** * @var int */ private $numTestedClasses = 0; + /** + * @var int + */ + private $numTraits = null; + + /** + * @var int + */ + private $numTestedTraits = 0; + /** * @var int */ @@ -110,7 +120,7 @@ class File extends AbstractNode */ public function __construct($name, AbstractNode $parent, array $coverageData, array $testData, $cacheTokens) { - if (!is_bool($cacheTokens)) { + if (!\is_bool($cacheTokens)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -223,7 +233,21 @@ class File extends AbstractNode */ public function getNumClasses() { - return count($this->classes); + if ($this->numClasses === null) { + $this->numClasses = 0; + + foreach ($this->classes as $class) { + foreach ($class['methods'] as $method) { + if ($method['executableLines'] > 0) { + $this->numClasses++; + + continue 2; + } + } + } + } + + return $this->numClasses; } /** @@ -243,7 +267,21 @@ class File extends AbstractNode */ public function getNumTraits() { - return count($this->traits); + if ($this->numTraits === null) { + $this->numTraits = 0; + + foreach ($this->traits as $trait) { + foreach ($trait['methods'] as $method) { + if ($method['executableLines'] > 0) { + $this->numTraits++; + + continue 2; + } + } + } + } + + return $this->numTraits; } /** @@ -325,7 +363,7 @@ class File extends AbstractNode */ public function getNumFunctions() { - return count($this->functions); + return \count($this->functions); } /** @@ -412,7 +450,7 @@ class File extends AbstractNode $this->numExecutableLines++; - if (count($this->coverageData[$lineNumber]) > 0) { + if (\count($this->coverageData[$lineNumber]) > 0) { if (isset($currentClass)) { $currentClass['executedLines']++; } @@ -439,8 +477,8 @@ class File extends AbstractNode unset($currentClass); if ($classStack) { - end($classStack); - $key = key($classStack); + \end($classStack); + $key = \key($classStack); $currentClass = &$classStack[$key]; unset($classStack[$key]); } @@ -455,8 +493,8 @@ class File extends AbstractNode unset($currentFunction); if ($functionStack) { - end($functionStack); - $key = key($functionStack); + \end($functionStack); + $key = \key($functionStack); $currentFunction = &$functionStack[$key]; unset($functionStack[$key]); } @@ -484,14 +522,14 @@ class File extends AbstractNode if ($trait['executableLines'] > 0) { $trait['coverage'] = ($trait['executedLines'] / $trait['executableLines']) * 100; + + if ($trait['coverage'] == 100) { + $this->numTestedClasses++; + } } else { $trait['coverage'] = 100; } - if ($trait['coverage'] == 100) { - $this->numTestedClasses++; - } - $trait['crap'] = $this->crap( $trait['ccn'], $trait['coverage'] @@ -518,19 +556,37 @@ class File extends AbstractNode if ($class['executableLines'] > 0) { $class['coverage'] = ($class['executedLines'] / $class['executableLines']) * 100; + + if ($class['coverage'] == 100) { + $this->numTestedClasses++; + } } else { $class['coverage'] = 100; } - if ($class['coverage'] == 100) { - $this->numTestedClasses++; - } - $class['crap'] = $this->crap( $class['ccn'], $class['coverage'] ); } + + foreach ($this->functions as &$function) { + if ($function['executableLines'] > 0) { + $function['coverage'] = ($function['executedLines'] / + $function['executableLines']) * 100; + } else { + $function['coverage'] = 100; + } + + if ($function['coverage'] == 100) { + $this->numTestedFunctions++; + } + + $function['crap'] = $this->crap( + $function['ccn'], + $function['coverage'] + ); + } } /** @@ -544,6 +600,10 @@ class File extends AbstractNode $link = $this->getId() . '.html#'; foreach ($classes as $className => $class) { + if (!empty($class['package']['namespace'])) { + $className = $class['package']['namespace'] . '\\' . $className; + } + $this->classes[$className] = [ 'className' => $className, 'methods' => [], @@ -645,16 +705,16 @@ class File extends AbstractNode protected function crap($ccn, $coverage) { if ($coverage == 0) { - return (string) (pow($ccn, 2) + $ccn); + return (string) (\pow($ccn, 2) + $ccn); } if ($coverage >= 95) { return (string) $ccn; } - return sprintf( + return \sprintf( '%01.2F', - pow($ccn, 2) * pow(1 - $coverage/100, 3) + $ccn + \pow($ccn, 2) * \pow(1 - $coverage / 100, 3) + $ccn ); } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Iterator.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Iterator.php index e2463805..2a2aa6b0 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Iterator.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Iterator.php @@ -48,7 +48,7 @@ class Iterator implements \RecursiveIterator */ public function valid() { - return $this->position < count($this->nodes); + return $this->position < \count($this->nodes); } /** diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Clover.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Clover.php index 054b1dfd..358d0ddd 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Clover.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Clover.php @@ -37,7 +37,7 @@ class Clover $xmlProject = $xmlDocument->createElement('project'); $xmlProject->setAttribute('timestamp', (int) $_SERVER['REQUEST_TIME']); - if (is_string($name)) { + if (\is_string($name)) { $xmlProject->setAttribute('name', $name); } @@ -69,12 +69,12 @@ class Clover $classMethods = 0; foreach ($class['methods'] as $methodName => $method) { - if ($method['executableLines'] == 0) { + if ($method['executableLines'] == 0) { continue; } $classMethods++; - $classStatements += $method['executableLines']; + $classStatements += $method['executableLines']; $coveredClassStatements += $method['executedLines']; if ($method['coverage'] == 100) { @@ -83,9 +83,9 @@ class Clover $methodCount = 0; - foreach (range($method['startLine'], $method['endLine']) as $line) { + foreach (\range($method['startLine'], $method['endLine']) as $line) { if (isset($coverage[$line]) && ($coverage[$line] !== null)) { - $methodCount = max($methodCount, count($coverage[$line])); + $methodCount = \max($methodCount, \count($coverage[$line])); } } @@ -156,11 +156,11 @@ class Clover } $lines[$line] = [ - 'count' => count($data), 'type' => 'stmt' + 'count' => \count($data), 'type' => 'stmt' ]; } - ksort($lines); + \ksort($lines); foreach ($lines as $line => $data) { $xmlLine = $xmlDocument->createElement('line'); @@ -222,7 +222,7 @@ class Clover $linesOfCode = $report->getLinesOfCode(); $xmlMetrics = $xmlDocument->createElement('metrics'); - $xmlMetrics->setAttribute('files', count($report)); + $xmlMetrics->setAttribute('files', \count($report)); $xmlMetrics->setAttribute('loc', $linesOfCode['loc']); $xmlMetrics->setAttribute('ncloc', $linesOfCode['ncloc']); $xmlMetrics->setAttribute('classes', $report->getNumClassesAndTraits()); @@ -239,11 +239,11 @@ class Clover $buffer = $xmlDocument->saveXML(); if ($target !== null) { - if (!is_dir(dirname($target))) { - mkdir(dirname($target), 0777, true); + if (!\is_dir(\dirname($target))) { + \mkdir(\dirname($target), 0777, true); } - file_put_contents($target, $buffer); + \file_put_contents($target, $buffer); } return $buffer; diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php index 7adf78fe..3851a27d 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php @@ -11,8 +11,8 @@ namespace SebastianBergmann\CodeCoverage\Report; use SebastianBergmann\CodeCoverage\CodeCoverage; -use SebastianBergmann\CodeCoverage\Node\File; use SebastianBergmann\CodeCoverage\InvalidArgumentException; +use SebastianBergmann\CodeCoverage\Node\File; class Crap4j { @@ -26,7 +26,7 @@ class Crap4j */ public function __construct($threshold = 30) { - if (!is_int($threshold)) { + if (!\is_int($threshold)) { throw InvalidArgumentException::create( 1, 'integer' @@ -51,9 +51,9 @@ class Crap4j $root = $document->createElement('crap_result'); $document->appendChild($root); - $project = $document->createElement('project', is_string($name) ? $name : ''); + $project = $document->createElement('project', \is_string($name) ? $name : ''); $root->appendChild($project); - $root->appendChild($document->createElement('timestamp', date('Y-m-d H:i:s', (int) $_SERVER['REQUEST_TIME']))); + $root->appendChild($document->createElement('timestamp', \date('Y-m-d H:i:s', (int) $_SERVER['REQUEST_TIME']))); $stats = $document->createElement('stats'); $methodsNode = $document->createElement('methods'); @@ -82,7 +82,7 @@ class Crap4j foreach ($class['methods'] as $methodName => $method) { $crapLoad = $this->getCrapLoad($method['crap'], $method['ccn'], $method['coverage']); - $fullCrap += $method['crap']; + $fullCrap += $method['crap']; $fullCrapLoad += $crapLoad; $fullMethodCount++; @@ -99,12 +99,12 @@ class Crap4j $methodNode->appendChild($document->createElement('package', $namespace)); $methodNode->appendChild($document->createElement('className', $className)); $methodNode->appendChild($document->createElement('methodName', $methodName)); - $methodNode->appendChild($document->createElement('methodSignature', htmlspecialchars($method['signature']))); - $methodNode->appendChild($document->createElement('fullMethod', htmlspecialchars($method['signature']))); + $methodNode->appendChild($document->createElement('methodSignature', \htmlspecialchars($method['signature']))); + $methodNode->appendChild($document->createElement('fullMethod', \htmlspecialchars($method['signature']))); $methodNode->appendChild($document->createElement('crap', $this->roundValue($method['crap']))); $methodNode->appendChild($document->createElement('complexity', $method['ccn'])); $methodNode->appendChild($document->createElement('coverage', $this->roundValue($method['coverage']))); - $methodNode->appendChild($document->createElement('crapLoad', round($crapLoad))); + $methodNode->appendChild($document->createElement('crapLoad', \round($crapLoad))); $methodsNode->appendChild($methodNode); } @@ -114,7 +114,7 @@ class Crap4j $stats->appendChild($document->createElement('name', 'Method Crap Stats')); $stats->appendChild($document->createElement('methodCount', $fullMethodCount)); $stats->appendChild($document->createElement('crapMethodCount', $fullCrapMethodCount)); - $stats->appendChild($document->createElement('crapLoad', round($fullCrapLoad))); + $stats->appendChild($document->createElement('crapLoad', \round($fullCrapLoad))); $stats->appendChild($document->createElement('totalCrap', $fullCrap)); if ($fullMethodCount > 0) { @@ -131,11 +131,11 @@ class Crap4j $buffer = $document->saveXML(); if ($target !== null) { - if (!is_dir(dirname($target))) { - mkdir(dirname($target), 0777, true); + if (!\is_dir(\dirname($target))) { + \mkdir(\dirname($target), 0777, true); } - file_put_contents($target, $buffer); + \file_put_contents($target, $buffer); } return $buffer; @@ -167,6 +167,6 @@ class Crap4j */ private function roundValue($value) { - return round($value, 2); + return \round($value, 2); } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php index adcfe424..ef88041f 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php @@ -65,10 +65,10 @@ class Facade unset($coverage); if (!isset($_SERVER['REQUEST_TIME'])) { - $_SERVER['REQUEST_TIME'] = time(); + $_SERVER['REQUEST_TIME'] = \time(); } - $date = date('D M j G:i:s T Y', $_SERVER['REQUEST_TIME']); + $date = \date('D M j G:i:s T Y', $_SERVER['REQUEST_TIME']); $dashboard = new Dashboard( $this->templatePath, @@ -101,17 +101,17 @@ class Facade $id = $node->getId(); if ($node instanceof DirectoryNode) { - if (!file_exists($target . $id)) { - mkdir($target . $id, 0777, true); + if (!\file_exists($target . $id)) { + \mkdir($target . $id, 0777, true); } $directory->render($node, $target . $id . '/index.html'); $dashboard->render($node, $target . $id . '/dashboard.html'); } else { - $dir = dirname($target . $id); + $dir = \dirname($target . $id); - if (!file_exists($dir)) { - mkdir($dir, 0777, true); + if (!\file_exists($dir)) { + \mkdir($dir, 0777, true); } $file->render($node, $target . $id . '.html'); @@ -126,26 +126,37 @@ class Facade */ private function copyFiles($target) { - $dir = $this->getDirectory($target . 'css'); - copy($this->templatePath . 'css/bootstrap.min.css', $dir . 'bootstrap.min.css'); - copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css'); - copy($this->templatePath . 'css/style.css', $dir . 'style.css'); + $dir = $this->getDirectory($target . '.css'); - $dir = $this->getDirectory($target . 'fonts'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.eot', $dir . 'glyphicons-halflings-regular.eot'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.svg', $dir . 'glyphicons-halflings-regular.svg'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.ttf', $dir . 'glyphicons-halflings-regular.ttf'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff', $dir . 'glyphicons-halflings-regular.woff'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff2', $dir . 'glyphicons-halflings-regular.woff2'); + \file_put_contents( + $dir . 'bootstrap.min.css', + \str_replace( + 'url(../fonts/', + 'url(../.fonts/', + \file_get_contents($this->templatePath . 'css/bootstrap.min.css') + ) - $dir = $this->getDirectory($target . 'js'); - copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js'); - copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js'); - copy($this->templatePath . 'js/holder.min.js', $dir . 'holder.min.js'); - copy($this->templatePath . 'js/html5shiv.min.js', $dir . 'html5shiv.min.js'); - copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js'); - copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js'); - copy($this->templatePath . 'js/respond.min.js', $dir . 'respond.min.js'); + ); + + \copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css'); + \copy($this->templatePath . 'css/style.css', $dir . 'style.css'); + + $dir = $this->getDirectory($target . '.fonts'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.eot', $dir . 'glyphicons-halflings-regular.eot'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.svg', $dir . 'glyphicons-halflings-regular.svg'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.ttf', $dir . 'glyphicons-halflings-regular.ttf'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff', $dir . 'glyphicons-halflings-regular.woff'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff2', $dir . 'glyphicons-halflings-regular.woff2'); + + $dir = $this->getDirectory($target . '.js'); + \copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js'); + \copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js'); + \copy($this->templatePath . 'js/holder.min.js', $dir . 'holder.min.js'); + \copy($this->templatePath . 'js/html5shiv.min.js', $dir . 'html5shiv.min.js'); + \copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js'); + \copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js'); + \copy($this->templatePath . 'js/respond.min.js', $dir . 'respond.min.js'); + \copy($this->templatePath . 'js/file.js', $dir . 'file.js'); } /** @@ -157,20 +168,20 @@ class Facade */ private function getDirectory($directory) { - if (substr($directory, -1, 1) != DIRECTORY_SEPARATOR) { + if (\substr($directory, -1, 1) != DIRECTORY_SEPARATOR) { $directory .= DIRECTORY_SEPARATOR; } - if (is_dir($directory)) { + if (\is_dir($directory)) { return $directory; } - if (@mkdir($directory, 0777, true)) { + if (@\mkdir($directory, 0777, true)) { return $directory; } throw new RuntimeException( - sprintf( + \sprintf( 'Directory "%s" does not exist.', $directory ) diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php index 7f5af8bb..1732161f 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php @@ -11,10 +11,10 @@ namespace SebastianBergmann\CodeCoverage\Report\Html; use SebastianBergmann\CodeCoverage\Node\AbstractNode; -use SebastianBergmann\CodeCoverage\Node\File as FileNode; use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; +use SebastianBergmann\CodeCoverage\Node\File as FileNode; +use SebastianBergmann\CodeCoverage\Version; use SebastianBergmann\Environment\Runtime; -use SebastianBergmann\Version; /** * Base class for node renderers. @@ -62,14 +62,12 @@ abstract class Renderer */ public function __construct($templatePath, $generator, $date, $lowUpperBound, $highLowerBound) { - $version = new Version('4.0.2', dirname(dirname(dirname(dirname(__DIR__))))); - $this->templatePath = $templatePath; $this->generator = $generator; $this->date = $date; $this->lowUpperBound = $lowUpperBound; $this->highLowerBound = $highLowerBound; - $this->version = $version->getVersion(); + $this->version = Version::id(); } /** @@ -92,9 +90,10 @@ abstract class Renderer $data['testedClassesPercent'] ); } else { - $classesLevel = 'success'; - $classesNumber = '0' . $numSeparator . '0'; - $classesBar = $this->getCoverageBar(100); + $classesLevel = ''; + $classesNumber = '0' . $numSeparator . '0'; + $classesBar = ''; + $data['testedClassesPercentAsString'] = 'n/a'; } if ($data['numMethods'] > 0) { @@ -107,10 +106,10 @@ abstract class Renderer $data['testedMethodsPercent'] ); } else { - $methodsLevel = 'success'; + $methodsLevel = ''; $methodsNumber = '0' . $numSeparator . '0'; - $methodsBar = $this->getCoverageBar(100); - $data['testedMethodsPercentAsString'] = '100.00%'; + $methodsBar = ''; + $data['testedMethodsPercentAsString'] = 'n/a'; } if ($data['numExecutableLines'] > 0) { @@ -123,10 +122,10 @@ abstract class Renderer $data['linesExecutedPercent'] ); } else { - $linesLevel = 'success'; + $linesLevel = ''; $linesNumber = '0' . $numSeparator . '0'; - $linesBar = $this->getCoverageBar(100); - $data['linesExecutedPercentAsString'] = '100.00%'; + $linesBar = ''; + $data['linesExecutedPercentAsString'] = 'n/a'; } $template->setVar( @@ -179,21 +178,21 @@ abstract class Renderer $breadcrumbs = ''; $path = $node->getPathAsArray(); $pathToRoot = []; - $max = count($path); + $max = \count($path); if ($node instanceof FileNode) { $max--; } for ($i = 0; $i < $max; $i++) { - $pathToRoot[] = str_repeat('../', $i); + $pathToRoot[] = \str_repeat('../', $i); } foreach ($path as $step) { if ($step !== $node) { $breadcrumbs .= $this->getInactiveBreadcrumb( $step, - array_pop($pathToRoot) + \array_pop($pathToRoot) ); } else { $breadcrumbs .= $this->getActiveBreadcrumb($step); @@ -205,7 +204,7 @@ abstract class Renderer protected function getActiveBreadcrumb(AbstractNode $node) { - $buffer = sprintf( + $buffer = \sprintf( '
  • %s
  • ' . "\n", $node->getName() ); @@ -219,7 +218,7 @@ abstract class Renderer protected function getInactiveBreadcrumb(AbstractNode $node, $pathToRoot) { - return sprintf( + return \sprintf( '
  • %s
  • ' . "\n", $pathToRoot, $node->getName() @@ -229,14 +228,14 @@ abstract class Renderer protected function getPathToRoot(AbstractNode $node) { $id = $node->getId(); - $depth = substr_count($id, '/'); + $depth = \substr_count($id, '/'); if ($id != 'index' && $node instanceof DirectoryNode) { $depth++; } - return str_repeat('../', $depth); + return \str_repeat('../', $depth); } protected function getCoverageBar($percent) @@ -249,7 +248,7 @@ abstract class Renderer '}}' ); - $template->setVar(['level' => $level, 'percent' => sprintf('%.2F', $percent)]); + $template->setVar(['level' => $level, 'percent' => \sprintf('%.2F', $percent)]); return $template->render(); } @@ -264,7 +263,7 @@ abstract class Renderer if ($percent <= $this->lowUpperBound) { return 'danger'; } elseif ($percent > $this->lowUpperBound && - $percent < $this->highLowerBound) { + $percent < $this->highLowerBound) { return 'warning'; } else { return 'success'; @@ -278,7 +277,7 @@ abstract class Renderer { $runtime = new Runtime; - $buffer = sprintf( + $buffer = \sprintf( '%s %s', $runtime->getVendorUrl(), $runtime->getName(), @@ -286,9 +285,9 @@ abstract class Renderer ); if ($runtime->hasXdebug() && !$runtime->hasPHPDBGCodeCoverage()) { - $buffer .= sprintf( + $buffer .= \sprintf( ' with Xdebug %s', - phpversion('xdebug') + \phpversion('xdebug') ); } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php index 7cde1755..0ca7b420 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php @@ -21,6 +21,8 @@ class Dashboard extends Renderer /** * @param DirectoryNode $node * @param string $file + * + * @throws \InvalidArgumentException */ public function render(DirectoryNode $node, $file) { @@ -69,16 +71,16 @@ class Dashboard extends Renderer foreach ($classes as $className => $class) { foreach ($class['methods'] as $methodName => $method) { - if ($className != '*') { + if ($className !== '*') { $methodName = $className . '::' . $methodName; } $result['method'][] = [ $method['coverage'], $method['ccn'], - sprintf( + \sprintf( '%s', - str_replace($baseLink, '', $method['link']), + \str_replace($baseLink, '', $method['link']), $methodName ) ]; @@ -87,17 +89,17 @@ class Dashboard extends Renderer $result['class'][] = [ $class['coverage'], $class['ccn'], - sprintf( + \sprintf( '%s', - str_replace($baseLink, '', $class['link']), + \str_replace($baseLink, '', $class['link']), $className ) ]; } return [ - 'class' => json_encode($result['class']), - 'method' => json_encode($result['method']) + 'class' => \json_encode($result['class']), + 'method' => \json_encode($result['method']) ]; } @@ -143,31 +145,31 @@ class Dashboard extends Renderer foreach ($classes as $class) { foreach ($class['methods'] as $methodName => $method) { - if ($method['coverage'] == 0) { + if ($method['coverage'] === 0) { $result['method']['0%']++; - } elseif ($method['coverage'] == 100) { + } elseif ($method['coverage'] === 100) { $result['method']['100%']++; } else { - $key = floor($method['coverage'] / 10) * 10; + $key = \floor($method['coverage'] / 10) * 10; $key = $key . '-' . ($key + 10) . '%'; $result['method'][$key]++; } } - if ($class['coverage'] == 0) { + if ($class['coverage'] === 0) { $result['class']['0%']++; - } elseif ($class['coverage'] == 100) { + } elseif ($class['coverage'] === 100) { $result['class']['100%']++; } else { - $key = floor($class['coverage'] / 10) * 10; + $key = \floor($class['coverage'] / 10) * 10; $key = $key . '-' . ($key + 10) . '%'; $result['class'][$key]++; } } return [ - 'class' => json_encode(array_values($result['class'])), - 'method' => json_encode(array_values($result['method'])) + 'class' => \json_encode(\array_values($result['class'])), + 'method' => \json_encode(\array_values($result['method'])) ]; } @@ -188,10 +190,10 @@ class Dashboard extends Renderer foreach ($classes as $className => $class) { foreach ($class['methods'] as $methodName => $method) { if ($method['coverage'] < $this->highLowerBound) { - if ($className != '*') { + $key = $methodName; + + if ($className !== '*') { $key = $className . '::' . $methodName; - } else { - $key = $methodName; } $leastTestedMethods[$key] = $method['coverage']; @@ -203,24 +205,24 @@ class Dashboard extends Renderer } } - asort($leastTestedClasses); - asort($leastTestedMethods); + \asort($leastTestedClasses); + \asort($leastTestedMethods); foreach ($leastTestedClasses as $className => $coverage) { - $result['class'] .= sprintf( + $result['class'] .= \sprintf( ' %s%d%%' . "\n", - str_replace($baseLink, '', $classes[$className]['link']), + \str_replace($baseLink, '', $classes[$className]['link']), $className, $coverage ); } foreach ($leastTestedMethods as $methodName => $coverage) { - list($class, $method) = explode('::', $methodName); + list($class, $method) = \explode('::', $methodName); - $result['method'] .= sprintf( + $result['method'] .= \sprintf( ' %s%d%%' . "\n", - str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), + \str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), $methodName, $method, $coverage @@ -248,7 +250,7 @@ class Dashboard extends Renderer foreach ($class['methods'] as $methodName => $method) { if ($method['coverage'] < $this->highLowerBound && $method['ccn'] > 1) { - if ($className != '*') { + if ($className !== '*') { $key = $className . '::' . $methodName; } else { $key = $methodName; @@ -259,29 +261,29 @@ class Dashboard extends Renderer } if ($class['coverage'] < $this->highLowerBound && - $class['ccn'] > count($class['methods'])) { + $class['ccn'] > \count($class['methods'])) { $classRisks[$className] = $class['crap']; } } - arsort($classRisks); - arsort($methodRisks); + \arsort($classRisks); + \arsort($methodRisks); foreach ($classRisks as $className => $crap) { - $result['class'] .= sprintf( + $result['class'] .= \sprintf( ' %s%d' . "\n", - str_replace($baseLink, '', $classes[$className]['link']), + \str_replace($baseLink, '', $classes[$className]['link']), $className, $crap ); } foreach ($methodRisks as $methodName => $crap) { - list($class, $method) = explode('::', $methodName); + list($class, $method) = \explode('::', $methodName); - $result['method'] .= sprintf( + $result['method'] .= \sprintf( ' %s%d' . "\n", - str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), + \str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), $methodName, $method, $crap @@ -293,7 +295,7 @@ class Dashboard extends Renderer protected function getActiveBreadcrumb(AbstractNode $node) { - return sprintf( + return \sprintf( '
  • %s
  • ' . "\n" . '
  • (Dashboard)
  • ' . "\n", $node->getName() diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php index a4b1b96f..59e5a3b3 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php @@ -59,14 +59,14 @@ class Directory extends Renderer $data = [ 'numClasses' => $node->getNumClassesAndTraits(), 'numTestedClasses' => $node->getNumTestedClassesAndTraits(), - 'numMethods' => $node->getNumMethods(), - 'numTestedMethods' => $node->getNumTestedMethods(), + 'numMethods' => $node->getNumFunctionsAndMethods(), + 'numTestedMethods' => $node->getNumTestedFunctionsAndMethods(), 'linesExecutedPercent' => $node->getLineExecutedPercent(false), 'linesExecutedPercentAsString' => $node->getLineExecutedPercent(), 'numExecutedLines' => $node->getNumExecutedLines(), 'numExecutableLines' => $node->getNumExecutableLines(), - 'testedMethodsPercent' => $node->getTestedMethodsPercent(false), - 'testedMethodsPercentAsString' => $node->getTestedMethodsPercent(), + 'testedMethodsPercent' => $node->getTestedFunctionsAndMethodsPercent(false), + 'testedMethodsPercentAsString' => $node->getTestedFunctionsAndMethodsPercent(), 'testedClassesPercent' => $node->getTestedClassesAndTraitsPercent(false), 'testedClassesPercentAsString' => $node->getTestedClassesAndTraitsPercent() ]; @@ -75,7 +75,7 @@ class Directory extends Renderer $data['name'] = 'Total'; } else { if ($node instanceof DirectoryNode) { - $data['name'] = sprintf( + $data['name'] = \sprintf( '%s', $node->getName(), $node->getName() @@ -83,7 +83,7 @@ class Directory extends Renderer $data['icon'] = ' '; } else { - $data['name'] = sprintf( + $data['name'] = \sprintf( '%s', $node->getName(), $node->getName() diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php index e6b11ef0..8e8bacde 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php @@ -88,14 +88,14 @@ class File extends Renderer 'name' => 'Total', 'numClasses' => $node->getNumClassesAndTraits(), 'numTestedClasses' => $node->getNumTestedClassesAndTraits(), - 'numMethods' => $node->getNumMethods(), - 'numTestedMethods' => $node->getNumTestedMethods(), + 'numMethods' => $node->getNumFunctionsAndMethods(), + 'numTestedMethods' => $node->getNumTestedFunctionsAndMethods(), 'linesExecutedPercent' => $node->getLineExecutedPercent(false), 'linesExecutedPercentAsString' => $node->getLineExecutedPercent(), 'numExecutedLines' => $node->getNumExecutedLines(), 'numExecutableLines' => $node->getNumExecutableLines(), - 'testedMethodsPercent' => $node->getTestedMethodsPercent(false), - 'testedMethodsPercentAsString' => $node->getTestedMethodsPercent(), + 'testedMethodsPercent' => $node->getTestedFunctionsAndMethodsPercent(false), + 'testedMethodsPercentAsString' => $node->getTestedFunctionsAndMethodsPercent(), 'testedClassesPercent' => $node->getTestedClassesAndTraitsPercent(false), 'testedClassesPercentAsString' => $node->getTestedClassesAndTraitsPercent(), 'crap' => 'CRAP' @@ -138,7 +138,7 @@ class File extends Renderer $buffer = ''; foreach ($items as $name => $item) { - $numMethods = count($item['methods']); + $numMethods = \count($item['methods']); $numTestedMethods = 0; foreach ($item['methods'] as $method) { @@ -147,12 +147,26 @@ class File extends Renderer } } + if ($item['executableLines'] > 0) { + $numClasses = 1; + $numTestedClasses = $numTestedMethods == $numMethods ? 1 : 0; + $linesExecutedPercentAsString = Util::percent( + $item['executedLines'], + $item['executableLines'], + true + ); + } else { + $numClasses = 'n/a'; + $numTestedClasses = 'n/a'; + $linesExecutedPercentAsString = 'n/a'; + } + $buffer .= $this->renderItemTemplate( $template, [ 'name' => $name, - 'numClasses' => 1, - 'numTestedClasses' => $numTestedMethods == $numMethods ? 1 : 0, + 'numClasses' => $numClasses, + 'numTestedClasses' => $numTestedClasses, 'numMethods' => $numMethods, 'numTestedMethods' => $numTestedMethods, 'linesExecutedPercent' => Util::percent( @@ -160,11 +174,7 @@ class File extends Renderer $item['executableLines'], false ), - 'linesExecutedPercentAsString' => Util::percent( - $item['executedLines'], - $item['executableLines'], - true - ), + 'linesExecutedPercentAsString' => $linesExecutedPercentAsString, 'numExecutedLines' => $item['executedLines'], 'numExecutableLines' => $item['executableLines'], 'testedMethodsPercent' => Util::percent( @@ -239,11 +249,11 @@ class File extends Renderer return $this->renderItemTemplate( $template, [ - 'name' => sprintf( + 'name' => \sprintf( '%s%s', $indent, $item['startLine'], - htmlspecialchars($item['signature']), + \htmlspecialchars($item['signature']), isset($item['functionName']) ? $item['functionName'] : $item['methodName'] ), 'numMethods' => 1, @@ -293,8 +303,8 @@ class File extends Renderer $popoverContent = ''; $popoverTitle = ''; - if (array_key_exists($i, $coverageData)) { - $numTests = count($coverageData[$i]); + if (\array_key_exists($i, $coverageData)) { + $numTests = ($coverageData[$i] ? \count($coverageData[$i]) : 0); if ($coverageData[$i] === null) { $trClass = ' class="warning"'; @@ -322,39 +332,46 @@ class File extends Renderer switch ($testData[$test]['size']) { case 'small': $testCSS = ' class="covered-by-small-tests"'; + break; case 'medium': $testCSS = ' class="covered-by-medium-tests"'; + break; default: $testCSS = ' class="covered-by-large-tests"'; + break; } + break; case 1: case 2: $testCSS = ' class="warning"'; + break; case 3: $testCSS = ' class="danger"'; + break; case 4: $testCSS = ' class="danger"'; + break; default: $testCSS = ''; } - $popoverContent .= sprintf( + $popoverContent .= \sprintf( '%s', $testCSS, - htmlspecialchars($test) + \htmlspecialchars($test) ); } @@ -364,16 +381,16 @@ class File extends Renderer } if (!empty($popoverTitle)) { - $popover = sprintf( + $popover = \sprintf( ' data-title="%s" data-content="%s" data-placement="bottom" data-html="true"', $popoverTitle, - htmlspecialchars($popoverContent) + \htmlspecialchars($popoverContent) ); } else { $popover = ''; } - $lines .= sprintf( + $lines .= \sprintf( ' %s' . "\n", $trClass, $popover, @@ -396,28 +413,28 @@ class File extends Renderer */ protected function loadFile($file) { - $buffer = file_get_contents($file); - $tokens = token_get_all($buffer); + $buffer = \file_get_contents($file); + $tokens = \token_get_all($buffer); $result = ['']; $i = 0; $stringFlag = false; - $fileEndsWithNewLine = substr($buffer, -1) == "\n"; + $fileEndsWithNewLine = \substr($buffer, -1) == "\n"; unset($buffer); foreach ($tokens as $j => $token) { - if (is_string($token)) { + if (\is_string($token)) { if ($token === '"' && $tokens[$j - 1] !== '\\') { - $result[$i] .= sprintf( + $result[$i] .= \sprintf( '%s', - htmlspecialchars($token) + \htmlspecialchars($token) ); $stringFlag = !$stringFlag; } else { - $result[$i] .= sprintf( + $result[$i] .= \sprintf( '%s', - htmlspecialchars($token) + \htmlspecialchars($token) ); } @@ -426,19 +443,19 @@ class File extends Renderer list($token, $value) = $token; - $value = str_replace( + $value = \str_replace( ["\t", ' '], ['    ', ' '], - htmlspecialchars($value, $this->htmlspecialcharsFlags) + \htmlspecialchars($value, $this->htmlspecialcharsFlags) ); if ($value === "\n") { $result[++$i] = ''; } else { - $lines = explode("\n", $value); + $lines = \explode("\n", $value); foreach ($lines as $jj => $line) { - $line = trim($line); + $line = \trim($line); if ($line !== '') { if ($stringFlag) { @@ -447,11 +464,13 @@ class File extends Renderer switch ($token) { case T_INLINE_HTML: $colour = 'html'; + break; case T_COMMENT: case T_DOC_COMMENT: $colour = 'comment'; + break; case T_ABSTRACT: @@ -511,6 +530,7 @@ class File extends Renderer case T_WHILE: case T_YIELD: $colour = 'keyword'; + break; default: @@ -518,7 +538,7 @@ class File extends Renderer } } - $result[$i] .= sprintf( + $result[$i] .= \sprintf( '%s', $colour, $line @@ -533,7 +553,7 @@ class File extends Renderer } if ($fileEndsWithNewLine) { - unset($result[count($result)-1]); + unset($result[\count($result) - 1]); } return $result; diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css index 4cf729e4..ed3905e0 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css @@ -1,6 +1,6 @@ /*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} /*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist index 8bdf04d8..f45eb575 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist @@ -4,12 +4,12 @@ Dashboard for {{full_path}} - - - + + + @@ -138,11 +138,11 @@

    - - - - - + + + + + - - + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist index 8c42d4e8..ba03f0e5 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist @@ -4,11 +4,11 @@ Code Coverage for {{full_path}} - - + + @@ -60,31 +60,9 @@ - - - - + + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js index 48554cad..9bcd2fcc 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js @@ -1,7 +1,7 @@ /*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. * Licensed under the MIT license */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.6",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.6",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-Api blur.bs.button.data-Api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.6",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.6",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.js b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.js new file mode 100644 index 00000000..756cc08a --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.js @@ -0,0 +1,61 @@ + $(function() { + var $window = $(window) + , $top_link = $('#toplink') + , $body = $('body, html') + , offset = $('#code').offset().top + , hidePopover = function ($target) { + $target.data('popover-hover', false); + + setTimeout(function () { + if (!$target.data('popover-hover')) { + $target.popover('hide'); + } + }, 300); + }; + + $top_link.hide().click(function(event) { + event.preventDefault(); + $body.animate({scrollTop:0}, 800); + }); + + $window.scroll(function() { + if($window.scrollTop() > offset) { + $top_link.fadeIn(); + } else { + $top_link.fadeOut(); + } + }).scroll(); + + $('.popin') + .popover({trigger: 'manual'}) + .on({ + 'mouseenter.popover': function () { + var $target = $(this); + + $target.data('popover-hover', true); + + // popover already displayed + if ($target.next('.popover').length) { + return; + } + + // show the popover + $target.popover('show'); + + // register mouse events on the popover + $target.next('.popover:not(.popover-initialized)') + .on({ + 'mouseenter': function () { + $target.data('popover-hover', true); + }, + 'mouseleave': function () { + hidePopover($target); + } + }) + .addClass('popover-initialized'); + }, + 'mouseleave.popover': function () { + hidePopover($(this)); + } + }); + }); diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js index dad4f0af..4c5be4c0 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js @@ -1,5 +1,4 @@ -/*! jQuery v1.12.3 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; -}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
    a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:l.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("