From d864aff884253bec3fbdd467de7c23dc11a0ae5c Mon Sep 17 00:00:00 2001 From: Anyon Date: Mon, 14 May 2018 18:28:52 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=9B=B4=E6=96=B0]ComposerUpdate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vendor/autoload.php | 2 +- vendor/composer/autoload_classmap.php | 2 + vendor/composer/autoload_real.php | 14 +- vendor/composer/autoload_static.php | 10 +- vendor/composer/installed.json | 24 +-- vendor/symfony/options-resolver/CHANGELOG.md | 10 +- .../Debug/OptionsResolverIntrospector.php | 102 +++++++++ .../Exception/NoConfigurationException.php | 26 +++ vendor/symfony/options-resolver/LICENSE | 2 +- .../options-resolver/OptionsResolver.php | 108 +++++++--- .../Debug/OptionsResolverIntrospectorTest.php | 203 ++++++++++++++++++ .../Tests/OptionsResolverTest.php | 106 ++++++++- vendor/symfony/options-resolver/composer.json | 4 +- .../weopen-developer/WeMini/Code.php | 53 ----- .../weopen-developer/WeOpen/MiniApp.php | 53 +++++ 15 files changed, 598 insertions(+), 121 deletions(-) create mode 100644 vendor/symfony/options-resolver/Debug/OptionsResolverIntrospector.php create mode 100644 vendor/symfony/options-resolver/Exception/NoConfigurationException.php create mode 100644 vendor/symfony/options-resolver/Tests/Debug/OptionsResolverIntrospectorTest.php diff --git a/vendor/autoload.php b/vendor/autoload.php index 42f95cdb4..269a905fd 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInitc1d93f6aed332b488cbeadc70d2df32b::getLoader(); +return ComposerAutoloaderInitedd8bf4bf1f017c1edc90ff3c3c5de3c::getLoader(); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index a88cfb18b..d9068a5ae 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -102,11 +102,13 @@ return array( 'Qiniu\\Storage\\ResumeUploader' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php', 'Qiniu\\Storage\\UploadManager' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php', 'Qiniu\\Zone' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Zone.php', + 'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => $vendorDir . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php', 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => $vendorDir . '/symfony/options-resolver/Exception/AccessException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/options-resolver/Exception/ExceptionInterface.php', 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidArgumentException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidOptionsException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/MissingOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => $vendorDir . '/symfony/options-resolver/Exception/NoConfigurationException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => $vendorDir . '/symfony/options-resolver/Exception/NoSuchOptionException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => $vendorDir . '/symfony/options-resolver/Exception/OptionDefinitionException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 48c049acb..a0a34a973 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInitc1d93f6aed332b488cbeadc70d2df32b +class ComposerAutoloaderInitedd8bf4bf1f017c1edc90ff3c3c5de3c { private static $loader; @@ -19,15 +19,15 @@ class ComposerAutoloaderInitc1d93f6aed332b488cbeadc70d2df32b return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInitc1d93f6aed332b488cbeadc70d2df32b', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInitedd8bf4bf1f017c1edc90ff3c3c5de3c', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInitc1d93f6aed332b488cbeadc70d2df32b', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInitedd8bf4bf1f017c1edc90ff3c3c5de3c', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInitc1d93f6aed332b488cbeadc70d2df32b::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInitedd8bf4bf1f017c1edc90ff3c3c5de3c::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -48,19 +48,19 @@ class ComposerAutoloaderInitc1d93f6aed332b488cbeadc70d2df32b $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInitc1d93f6aed332b488cbeadc70d2df32b::$files; + $includeFiles = Composer\Autoload\ComposerStaticInitedd8bf4bf1f017c1edc90ff3c3c5de3c::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequirec1d93f6aed332b488cbeadc70d2df32b($fileIdentifier, $file); + composerRequireedd8bf4bf1f017c1edc90ff3c3c5de3c($fileIdentifier, $file); } return $loader; } } -function composerRequirec1d93f6aed332b488cbeadc70d2df32b($fileIdentifier, $file) +function composerRequireedd8bf4bf1f017c1edc90ff3c3c5de3c($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 36ce65176..8d902ed1e 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInitc1d93f6aed332b488cbeadc70d2df32b +class ComposerStaticInitedd8bf4bf1f017c1edc90ff3c3c5de3c { public static $files = array ( '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php', @@ -187,11 +187,13 @@ class ComposerStaticInitc1d93f6aed332b488cbeadc70d2df32b 'Qiniu\\Storage\\ResumeUploader' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php', 'Qiniu\\Storage\\UploadManager' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php', 'Qiniu\\Zone' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Zone.php', + 'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => __DIR__ . '/..' . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php', 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/AccessException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/ExceptionInterface.php', 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidArgumentException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidOptionsException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/MissingOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoConfigurationException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoSuchOptionException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/OptionDefinitionException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', @@ -285,9 +287,9 @@ class ComposerStaticInitc1d93f6aed332b488cbeadc70d2df32b public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInitc1d93f6aed332b488cbeadc70d2df32b::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInitc1d93f6aed332b488cbeadc70d2df32b::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInitc1d93f6aed332b488cbeadc70d2df32b::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInitedd8bf4bf1f017c1edc90ff3c3c5de3c::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitedd8bf4bf1f017c1edc90ff3c3c5de3c::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInitedd8bf4bf1f017c1edc90ff3c3c5de3c::$classMap; }, null, ClassLoader::class); } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index a075a0fb4..d6aa7153e 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -133,12 +133,12 @@ "source": { "type": "git", "url": "https://github.com/zoujingli/WeOpenDeveloper.git", - "reference": "fac7e7596edecd2abb7aad2168db3f253566cbf8" + "reference": "a6739da337a0c0b6e2da8103b353a42044b4a0c7" }, "dist": { "type": "zip", - "url": "https://files.phpcomposer.com/files/zoujingli/WeOpenDeveloper/fac7e7596edecd2abb7aad2168db3f253566cbf8.zip", - "reference": "fac7e7596edecd2abb7aad2168db3f253566cbf8", + "url": "https://files.phpcomposer.com/files/zoujingli/WeOpenDeveloper/a6739da337a0c0b6e2da8103b353a42044b4a0c7.zip", + "reference": "a6739da337a0c0b6e2da8103b353a42044b4a0c7", "shasum": "" }, "require": { @@ -147,7 +147,7 @@ "php": ">=5.4", "zoujingli/wechat-developer": "^1.0" }, - "time": "2018-05-12T07:54:53+00:00", + "time": "2018-05-12T14:10:32+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -272,27 +272,27 @@ }, { "name": "symfony/options-resolver", - "version": "v3.3.6", - "version_normalized": "3.3.6.0", + "version": "v3.4.9", + "version_normalized": "3.4.9.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0" + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e" }, "dist": { "type": "zip", - "url": "https://files.phpcomposer.com/files/symfony/options-resolver/ff48982d295bcac1fd861f934f041ebc73ae40f0.zip", - "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0", + "url": "https://files.phpcomposer.com/files/symfony/options-resolver/f3109a6aedd20e35c3a33190e932c2b063b7b50e.zip", + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, - "time": "2017-04-12T14:14:56+00:00", + "time": "2018-01-11T07:56:07+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "installation-source": "dist", diff --git a/vendor/symfony/options-resolver/CHANGELOG.md b/vendor/symfony/options-resolver/CHANGELOG.md index 5f6d15b2c..6e9d49fb6 100644 --- a/vendor/symfony/options-resolver/CHANGELOG.md +++ b/vendor/symfony/options-resolver/CHANGELOG.md @@ -1,6 +1,12 @@ CHANGELOG ========= +3.4.0 +----- + + * added `OptionsResolverIntrospector` to inspect options definitions inside an `OptionsResolver` instance + * added array of types support in allowed types (e.g int[]) + 2.6.0 ----- @@ -25,7 +31,7 @@ CHANGELOG * deprecated OptionsResolver::isKnown() in favor of isDefined() * [BC BREAK] OptionsResolver::isRequired() returns true now if a required option has a default value set - * [BC BREAK] merged Options into OptionsResolver and turned Options into an + * [BC BREAK] merged Options into OptionsResolver and turned Options into an interface * deprecated Options::overload() (now in OptionsResolver) * deprecated Options::set() (now in OptionsResolver) @@ -36,7 +42,7 @@ CHANGELOG lazy option/normalizer closures now * [BC BREAK] removed Traversable interface from Options since using within lazy option/normalizer closures resulted in exceptions - * [BC BREAK] removed Options::all() since using within lazy option/normalizer + * [BC BREAK] removed Options::all() since using within lazy option/normalizer closures resulted in exceptions * [BC BREAK] OptionDefinitionException now extends LogicException instead of RuntimeException diff --git a/vendor/symfony/options-resolver/Debug/OptionsResolverIntrospector.php b/vendor/symfony/options-resolver/Debug/OptionsResolverIntrospector.php new file mode 100644 index 000000000..60317243e --- /dev/null +++ b/vendor/symfony/options-resolver/Debug/OptionsResolverIntrospector.php @@ -0,0 +1,102 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Debug; + +use Symfony\Component\OptionsResolver\Exception\NoConfigurationException; +use Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException; +use Symfony\Component\OptionsResolver\OptionsResolver; + +/** + * @author Maxime Steinhausser + * + * @final + */ +class OptionsResolverIntrospector +{ + private $get; + + public function __construct(OptionsResolver $optionsResolver) + { + $this->get = \Closure::bind(function ($property, $option, $message) { + /** @var OptionsResolver $this */ + if (!$this->isDefined($option)) { + throw new UndefinedOptionsException(sprintf('The option "%s" does not exist.', $option)); + } + + if (!array_key_exists($option, $this->{$property})) { + throw new NoConfigurationException($message); + } + + return $this->{$property}[$option]; + }, $optionsResolver, $optionsResolver); + } + + /** + * @param string $option + * + * @return mixed + * + * @throws NoConfigurationException on no configured value + */ + public function getDefault($option) + { + return call_user_func($this->get, 'defaults', $option, sprintf('No default value was set for the "%s" option.', $option)); + } + + /** + * @param string $option + * + * @return \Closure[] + * + * @throws NoConfigurationException on no configured closures + */ + public function getLazyClosures($option) + { + return call_user_func($this->get, 'lazy', $option, sprintf('No lazy closures were set for the "%s" option.', $option)); + } + + /** + * @param string $option + * + * @return string[] + * + * @throws NoConfigurationException on no configured types + */ + public function getAllowedTypes($option) + { + return call_user_func($this->get, 'allowedTypes', $option, sprintf('No allowed types were set for the "%s" option.', $option)); + } + + /** + * @param string $option + * + * @return mixed[] + * + * @throws NoConfigurationException on no configured values + */ + public function getAllowedValues($option) + { + return call_user_func($this->get, 'allowedValues', $option, sprintf('No allowed values were set for the "%s" option.', $option)); + } + + /** + * @param string $option + * + * @return \Closure + * + * @throws NoConfigurationException on no configured normalizer + */ + public function getNormalizer($option) + { + return call_user_func($this->get, 'normalizers', $option, sprintf('No normalizer was set for the "%s" option.', $option)); + } +} diff --git a/vendor/symfony/options-resolver/Exception/NoConfigurationException.php b/vendor/symfony/options-resolver/Exception/NoConfigurationException.php new file mode 100644 index 000000000..6693ec14d --- /dev/null +++ b/vendor/symfony/options-resolver/Exception/NoConfigurationException.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Exception; + +use Symfony\Component\OptionsResolver\Debug\OptionsResolverIntrospector; + +/** + * Thrown when trying to introspect an option definition property + * for which no value was configured inside the OptionsResolver instance. + * + * @see OptionsResolverIntrospector + * + * @author Maxime Steinhausser + */ +class NoConfigurationException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/options-resolver/LICENSE b/vendor/symfony/options-resolver/LICENSE index 17d16a133..21d7fb9e2 100644 --- a/vendor/symfony/options-resolver/LICENSE +++ b/vendor/symfony/options-resolver/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2017 Fabien Potencier +Copyright (c) 2004-2018 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/options-resolver/OptionsResolver.php b/vendor/symfony/options-resolver/OptionsResolver.php index 32ac5663f..95a492de9 100644 --- a/vendor/symfony/options-resolver/OptionsResolver.php +++ b/vendor/symfony/options-resolver/OptionsResolver.php @@ -28,29 +28,21 @@ class OptionsResolver implements Options { /** * The names of all defined options. - * - * @var array */ private $defined = array(); /** * The default option values. - * - * @var array */ private $defaults = array(); /** * The names of required options. - * - * @var array */ private $required = array(); /** * The resolved option values. - * - * @var array */ private $resolved = array(); @@ -63,22 +55,16 @@ class OptionsResolver implements Options /** * A list of accepted values for each option. - * - * @var array */ private $allowedValues = array(); /** * A list of accepted types for each option. - * - * @var array */ private $allowedTypes = array(); /** * A list of closures for evaluating lazy options. - * - * @var array */ private $lazy = array(); @@ -86,8 +72,6 @@ class OptionsResolver implements Options * A list of lazy options whose closure is currently being called. * * This list helps detecting circular dependencies between lazy options. - * - * @var array */ private $calling = array(); @@ -98,8 +82,6 @@ class OptionsResolver implements Options * necessary in order to avoid inconsistencies during the resolving * process. If any option is changed after being read, all evaluated * lazy options that depend on this option would become invalid. - * - * @var bool */ private $locked = false; @@ -792,21 +774,12 @@ class OptionsResolver implements Options // Validate the type of the resolved option if (isset($this->allowedTypes[$option])) { $valid = false; + $invalidTypes = array(); foreach ($this->allowedTypes[$option] as $type) { $type = isset(self::$typeAliases[$type]) ? self::$typeAliases[$type] : $type; - if (function_exists($isFunction = 'is_'.$type)) { - if ($isFunction($value)) { - $valid = true; - break; - } - - continue; - } - - if ($value instanceof $type) { - $valid = true; + if ($valid = $this->verifyTypes($type, $value, $invalidTypes)) { break; } } @@ -818,7 +791,7 @@ class OptionsResolver implements Options $option, $this->formatValue($value), implode('" or "', $this->allowedTypes[$option]), - $this->formatTypeOf($value) + implode('|', array_keys($invalidTypes)) )); } } @@ -895,6 +868,45 @@ class OptionsResolver implements Options return $value; } + /** + * @param string $type + * @param mixed $value + * @param array &$invalidTypes + * + * @return bool + */ + private function verifyTypes($type, $value, array &$invalidTypes) + { + if ('[]' === substr($type, -2) && is_array($value)) { + $originalType = $type; + $type = substr($type, 0, -2); + $invalidValues = array_filter( // Filter out valid values, keeping invalid values in the resulting array + $value, + function ($value) use ($type) { + return !self::isValueValidType($type, $value); + } + ); + + if (!$invalidValues) { + return true; + } + + $invalidTypes[$this->formatTypeOf($value, $originalType)] = true; + + return false; + } + + if (self::isValueValidType($type, $value)) { + return true; + } + + if (!$invalidTypes) { + $invalidTypes[$this->formatTypeOf($value, null)] = true; + } + + return false; + } + /** * Returns whether a resolved option with the given name exists. * @@ -963,13 +975,38 @@ class OptionsResolver implements Options * parameters should usually not be included in messages aimed at * non-technical people. * - * @param mixed $value The value to return the type of + * @param mixed $value The value to return the type of + * @param string $type * * @return string The type of the value */ - private function formatTypeOf($value) + private function formatTypeOf($value, $type) { - return is_object($value) ? get_class($value) : gettype($value); + $suffix = ''; + + if ('[]' === substr($type, -2)) { + $suffix = '[]'; + $type = substr($type, 0, -2); + while ('[]' === substr($type, -2)) { + $type = substr($type, 0, -2); + $value = array_shift($value); + if (!is_array($value)) { + break; + } + $suffix .= '[]'; + } + + if (is_array($value)) { + $subTypes = array(); + foreach ($value as $val) { + $subTypes[$this->formatTypeOf($val, null)] = true; + } + + return implode('|', array_keys($subTypes)).$suffix; + } + } + + return (is_object($value) ? get_class($value) : gettype($value)).$suffix; } /** @@ -1036,4 +1073,9 @@ class OptionsResolver implements Options return implode(', ', $values); } + + private static function isValueValidType($type, $value) + { + return (function_exists($isFunction = 'is_'.$type) && $isFunction($value)) || $value instanceof $type; + } } diff --git a/vendor/symfony/options-resolver/Tests/Debug/OptionsResolverIntrospectorTest.php b/vendor/symfony/options-resolver/Tests/Debug/OptionsResolverIntrospectorTest.php new file mode 100644 index 000000000..7c4753ab5 --- /dev/null +++ b/vendor/symfony/options-resolver/Tests/Debug/OptionsResolverIntrospectorTest.php @@ -0,0 +1,203 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Tests\Debug; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\OptionsResolver\Debug\OptionsResolverIntrospector; +use Symfony\Component\OptionsResolver\Options; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class OptionsResolverIntrospectorTest extends TestCase +{ + public function testGetDefault() + { + $resolver = new OptionsResolver(); + $resolver->setDefault($option = 'foo', 'bar'); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getDefault($option)); + } + + public function testGetDefaultNull() + { + $resolver = new OptionsResolver(); + $resolver->setDefault($option = 'foo', null); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertNull($debug->getDefault($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\NoConfigurationException + * @expectedExceptionMessage No default value was set for the "foo" option. + */ + public function testGetDefaultThrowsOnNoConfiguredValue() + { + $resolver = new OptionsResolver(); + $resolver->setDefined($option = 'foo'); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getDefault($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + * @expectedExceptionMessage The option "foo" does not exist. + */ + public function testGetDefaultThrowsOnNotDefinedOption() + { + $resolver = new OptionsResolver(); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getDefault('foo')); + } + + public function testGetLazyClosures() + { + $resolver = new OptionsResolver(); + $closures = array(); + $resolver->setDefault($option = 'foo', $closures[] = function (Options $options) {}); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame($closures, $debug->getLazyClosures($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\NoConfigurationException + * @expectedExceptionMessage No lazy closures were set for the "foo" option. + */ + public function testGetLazyClosuresThrowsOnNoConfiguredValue() + { + $resolver = new OptionsResolver(); + $resolver->setDefined($option = 'foo'); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getLazyClosures($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + * @expectedExceptionMessage The option "foo" does not exist. + */ + public function testGetLazyClosuresThrowsOnNotDefinedOption() + { + $resolver = new OptionsResolver(); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getLazyClosures('foo')); + } + + public function testGetAllowedTypes() + { + $resolver = new OptionsResolver(); + $resolver->setDefined($option = 'foo'); + $resolver->setAllowedTypes($option = 'foo', $allowedTypes = array('string', 'bool')); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame($allowedTypes, $debug->getAllowedTypes($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\NoConfigurationException + * @expectedExceptionMessage No allowed types were set for the "foo" option. + */ + public function testGetAllowedTypesThrowsOnNoConfiguredValue() + { + $resolver = new OptionsResolver(); + $resolver->setDefined($option = 'foo'); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getAllowedTypes($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + * @expectedExceptionMessage The option "foo" does not exist. + */ + public function testGetAllowedTypesThrowsOnNotDefinedOption() + { + $resolver = new OptionsResolver(); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getAllowedTypes('foo')); + } + + public function testGetAllowedValues() + { + $resolver = new OptionsResolver(); + $resolver->setDefined($option = 'foo'); + $resolver->setAllowedValues($option = 'foo', $allowedValues = array('bar', 'baz')); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame($allowedValues, $debug->getAllowedValues($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\NoConfigurationException + * @expectedExceptionMessage No allowed values were set for the "foo" option. + */ + public function testGetAllowedValuesThrowsOnNoConfiguredValue() + { + $resolver = new OptionsResolver(); + $resolver->setDefined($option = 'foo'); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getAllowedValues($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + * @expectedExceptionMessage The option "foo" does not exist. + */ + public function testGetAllowedValuesThrowsOnNotDefinedOption() + { + $resolver = new OptionsResolver(); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getAllowedValues('foo')); + } + + public function testGetNormalizer() + { + $resolver = new OptionsResolver(); + $resolver->setDefined($option = 'foo'); + $resolver->setNormalizer($option = 'foo', $normalizer = function () {}); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame($normalizer, $debug->getNormalizer($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\NoConfigurationException + * @expectedExceptionMessage No normalizer was set for the "foo" option. + */ + public function testGetNormalizerThrowsOnNoConfiguredValue() + { + $resolver = new OptionsResolver(); + $resolver->setDefined($option = 'foo'); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getNormalizer($option)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + * @expectedExceptionMessage The option "foo" does not exist. + */ + public function testGetNormalizerThrowsOnNotDefinedOption() + { + $resolver = new OptionsResolver(); + + $debug = new OptionsResolverIntrospector($resolver); + $this->assertSame('bar', $debug->getNormalizer('foo')); + } +} diff --git a/vendor/symfony/options-resolver/Tests/OptionsResolverTest.php b/vendor/symfony/options-resolver/Tests/OptionsResolverTest.php index d09dece33..440af8b57 100644 --- a/vendor/symfony/options-resolver/Tests/OptionsResolverTest.php +++ b/vendor/symfony/options-resolver/Tests/OptionsResolverTest.php @@ -486,6 +486,15 @@ class OptionsResolverTest extends TestCase $this->resolver->setAllowedTypes('foo', 'string'); } + public function testResolveTypedArray() + { + $this->resolver->setDefined('foo'); + $this->resolver->setAllowedTypes('foo', 'string[]'); + $options = $this->resolver->resolve(array('foo' => array('bar', 'baz'))); + + $this->assertSame(array('foo' => array('bar', 'baz')), $options); + } + /** * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException */ @@ -500,6 +509,65 @@ class OptionsResolverTest extends TestCase $this->resolver->resolve(); } + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + * @expectedExceptionMessage The option "foo" with value array is expected to be of type "int[]", but is of type "DateTime[]". + */ + public function testResolveFailsIfInvalidTypedArray() + { + $this->resolver->setDefined('foo'); + $this->resolver->setAllowedTypes('foo', 'int[]'); + + $this->resolver->resolve(array('foo' => array(new \DateTime()))); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + * @expectedExceptionMessage The option "foo" with value "bar" is expected to be of type "int[]", but is of type "string". + */ + public function testResolveFailsWithNonArray() + { + $this->resolver->setDefined('foo'); + $this->resolver->setAllowedTypes('foo', 'int[]'); + + $this->resolver->resolve(array('foo' => 'bar')); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + * @expectedExceptionMessage The option "foo" with value array is expected to be of type "int[]", but is of type "integer|stdClass|array|DateTime[]". + */ + public function testResolveFailsIfTypedArrayContainsInvalidTypes() + { + $this->resolver->setDefined('foo'); + $this->resolver->setAllowedTypes('foo', 'int[]'); + $values = range(1, 5); + $values[] = new \stdClass(); + $values[] = array(); + $values[] = new \DateTime(); + $values[] = 123; + + $this->resolver->resolve(array('foo' => $values)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + * @expectedExceptionMessage The option "foo" with value array is expected to be of type "int[][]", but is of type "double[][]". + */ + public function testResolveFailsWithCorrectLevelsButWrongScalar() + { + $this->resolver->setDefined('foo'); + $this->resolver->setAllowedTypes('foo', 'int[][]'); + + $this->resolver->resolve( + array( + 'foo' => array( + array(1.2), + ), + ) + ); + } + /** * @dataProvider provideInvalidTypes */ @@ -568,6 +636,32 @@ class OptionsResolverTest extends TestCase $this->assertNotEmpty($this->resolver->resolve()); } + public function testResolveSucceedsIfTypedArray() + { + $this->resolver->setDefault('foo', null); + $this->resolver->setAllowedTypes('foo', array('null', 'DateTime[]')); + + $data = array( + 'foo' => array( + new \DateTime(), + new \DateTime(), + ), + ); + $result = $this->resolver->resolve($data); + $this->assertEquals($data, $result); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testResolveFailsIfNotInstanceOfClass() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedTypes('foo', '\stdClass'); + + $this->resolver->resolve(); + } + //////////////////////////////////////////////////////////////////////////// // addAllowedTypes() //////////////////////////////////////////////////////////////////////////// @@ -1419,12 +1513,12 @@ class OptionsResolverTest extends TestCase }); $this->resolver->setDefault('lazy2', function (Options $options) { - Assert::assertTrue(isset($options['default1'])); - Assert::assertTrue(isset($options['default2'])); - Assert::assertTrue(isset($options['required'])); - Assert::assertTrue(isset($options['lazy1'])); - Assert::assertTrue(isset($options['lazy2'])); - Assert::assertFalse(isset($options['defined'])); + Assert::assertArrayHasKey('default1', $options); + Assert::assertArrayHasKey('default2', $options); + Assert::assertArrayHasKey('required', $options); + Assert::assertArrayHasKey('lazy1', $options); + Assert::assertArrayHasKey('lazy2', $options); + Assert::assertArrayNotHasKey('defined', $options); Assert::assertSame(0, $options['default1']); Assert::assertSame(42, $options['default2']); diff --git a/vendor/symfony/options-resolver/composer.json b/vendor/symfony/options-resolver/composer.json index a751730af..895847ea5 100644 --- a/vendor/symfony/options-resolver/composer.json +++ b/vendor/symfony/options-resolver/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "autoload": { "psr-4": { "Symfony\\Component\\OptionsResolver\\": "" }, @@ -27,7 +27,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } } } diff --git a/vendor/zoujingli/weopen-developer/WeMini/Code.php b/vendor/zoujingli/weopen-developer/WeMini/Code.php index e298978f1..00d2fd946 100644 --- a/vendor/zoujingli/weopen-developer/WeMini/Code.php +++ b/vendor/zoujingli/weopen-developer/WeMini/Code.php @@ -341,57 +341,4 @@ class Code extends BasicWeChat return $this->httpGetForJson($url); } - /** - * 1、获取草稿箱内的所有临时代码草稿 - * @return array - * @throws \WeChat\Exceptions\InvalidResponseException - * @throws \WeChat\Exceptions\LocalCacheException - */ - public function getTemplateDraftList() - { - $url = 'https://api.weixin.qq.com/wxa/gettemplatedraftlist?access_token=ACCESS_TOKEN'; - $this->registerApi($url, __FUNCTION__, func_get_args()); - return $this->httpGetForJson($url); - } - - /** - * 2、获取代码模版库中的所有小程序代码模版 - * @return array - * @throws \WeChat\Exceptions\InvalidResponseException - * @throws \WeChat\Exceptions\LocalCacheException - */ - public function getTemplateList() - { - $url = 'https://api.weixin.qq.com/wxa/gettemplatelist?access_token=ACCESS_TOKEN'; - $this->registerApi($url, __FUNCTION__, func_get_args()); - return $this->httpGetForJson($url); - } - - /** - * 3、将草稿箱的草稿选为小程序代码模版 - * @param integer $draft_id 草稿ID,本字段可通过“ 获取草稿箱内的所有临时代码草稿 ”接口获得 - * @return array - * @throws \WeChat\Exceptions\InvalidResponseException - * @throws \WeChat\Exceptions\LocalCacheException - */ - public function addToTemplate($draft_id) - { - $url = 'https://api.weixin.qq.com/wxa/grayrelease?access_token=ACCESS_TOKEN'; - $this->registerApi($url, __FUNCTION__, func_get_args()); - return $this->httpPostForJson($url, ['draft_id' => $draft_id]); - } - - /** - * 4、删除指定小程序代码模版 - * @param integer $template_id 要删除的模版ID - * @return array - * @throws \WeChat\Exceptions\InvalidResponseException - * @throws \WeChat\Exceptions\LocalCacheException - */ - public function deleteTemplate($template_id) - { - $url = 'https://api.weixin.qq.com/wxa/deletetemplate?access_token=ACCESS_TOKEN'; - $this->registerApi($url, __FUNCTION__, func_get_args()); - return $this->httpPostForJson($url, ['template_id' => $template_id]); - } } \ No newline at end of file diff --git a/vendor/zoujingli/weopen-developer/WeOpen/MiniApp.php b/vendor/zoujingli/weopen-developer/WeOpen/MiniApp.php index 6732503cc..2125615cc 100644 --- a/vendor/zoujingli/weopen-developer/WeOpen/MiniApp.php +++ b/vendor/zoujingli/weopen-developer/WeOpen/MiniApp.php @@ -68,5 +68,58 @@ class MiniApp extends Service return "https://mp.weixin.qq.com/wxopen/componentrebindadmin?appid={$authorizerAppid}&component_appid={$componentAppid}&redirect_uri={$redirectUri}"; } + /** + * 1、获取草稿箱内的所有临时代码草稿 + * @return array + * @throws \WeChat\Exceptions\InvalidResponseException + * @throws \WeChat\Exceptions\LocalCacheException + */ + public function getTemplateDraftList() + { + $component_access_token = $this->getComponentAccessToken(); + $url = "https://api.weixin.qq.com/wxa/gettemplatedraftlist?access_token={$component_access_token}"; + return $this->httpGetForJson($url); + } + /** + * 2、获取代码模版库中的所有小程序代码模版 + * @return array + * @throws \WeChat\Exceptions\InvalidResponseException + * @throws \WeChat\Exceptions\LocalCacheException + */ + public function getTemplateList() + { + $component_access_token = $this->getComponentAccessToken(); + $url = "https://api.weixin.qq.com/wxa/gettemplatelist?access_token={$component_access_token}"; + return $this->httpGetForJson($url); + } + + /** + * 3、将草稿箱的草稿选为小程序代码模版 + * @param integer $draft_id 草稿ID,本字段可通过“ 获取草稿箱内的所有临时代码草稿 ”接口获得 + * @return array + * @throws \WeChat\Exceptions\InvalidResponseException + * @throws \WeChat\Exceptions\LocalCacheException + */ + public function addToTemplate($draft_id) + { + $component_access_token = $this->getComponentAccessToken(); + $url = "https://api.weixin.qq.com/wxa/addtotemplate?access_token={$component_access_token}"; + return $this->httpPostForJson($url, ['draft_id' => $draft_id]); + } + + /** + * 4、删除指定小程序代码模版 + * @param integer $template_id 要删除的模版ID + * @return array + * @throws \WeChat\Exceptions\InvalidResponseException + * @throws \WeChat\Exceptions\LocalCacheException + */ + public function deleteTemplate($template_id) + { + $component_access_token = $this->getComponentAccessToken(); + $url = "https://api.weixin.qq.com/wxa/deletetemplate?access_token={$component_access_token}"; + return $this->httpPostForJson($url, ['template_id' => $template_id]); + } + }