diff --git a/classes/local/execution/engine.php b/classes/local/execution/engine.php
index 1494178e..a89bf73d 100644
--- a/classes/local/execution/engine.php
+++ b/classes/local/execution/engine.php
@@ -757,7 +757,7 @@ private function setup_logging() {
$now = microtime(true);
[, $decimal] = explode('.', $now);
$decimal = substr($decimal, 0, 3); // Only use the first 3 digits after the decimal point.
- $rundateformat = date("Ymd_His$decimal", $now);
+ $rundateformat = date("Ymd_His$decimal", (int) $now);
// Each channel represents a specific way of writing log information.
$log = new Logger($channel);
diff --git a/composer.json b/composer.json
index b4418485..d51a264f 100644
--- a/composer.json
+++ b/composer.json
@@ -6,7 +6,7 @@
},
"require": {
"php": ">=7.4",
- "symfony/yaml": "^3.4",
+ "symfony/yaml": "^4.0",
"symfony/expression-language": "^3.4",
"phpseclib/phpseclib": "~3.0",
"symfony/monolog-bundle": "^3.6"
diff --git a/composer.lock b/composer.lock
index 8cf31d45..412f6685 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "27004af2480967797bba3972c1dd7743",
+ "content-hash": "79d5abc7ca7b1fedf320f36f9d9c65ff",
"packages": [
{
"name": "monolog/monolog",
@@ -2457,27 +2457,27 @@
},
{
"name": "symfony/yaml",
- "version": "v3.4.47",
+ "version": "v4.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "88289caa3c166321883f67fe5130188ebbb47094"
+ "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094",
- "reference": "88289caa3c166321883f67fe5130188ebbb47094",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d",
+ "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8",
+ "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8"
},
"conflict": {
"symfony/console": "<3.4"
},
"require-dev": {
- "symfony/console": "~3.4|~4.0"
+ "symfony/console": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
@@ -2505,10 +2505,10 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Yaml Component",
+ "description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v3.4.47"
+ "source": "https://github.com/symfony/yaml/tree/v4.4.45"
},
"funding": [
{
@@ -2524,7 +2524,7 @@
"type": "tidelift"
}
],
- "time": "2020-10-24T10:57:07+00:00"
+ "time": "2022-08-02T15:47:23+00:00"
}
],
"packages-dev": [],
@@ -2540,5 +2540,5 @@
"platform-overrides": {
"php": "7.4"
},
- "plugin-api-version": "2.3.0"
+ "plugin-api-version": "2.1.0"
}
diff --git a/thirdpartylibs.xml b/thirdpartylibs.xml
index c20b71a1..534d2901 100644
--- a/thirdpartylibs.xml
+++ b/thirdpartylibs.xml
@@ -101,7 +101,7 @@
vendor/symfony/yaml
yaml
- v3.4.47
+ v4.4.45
MIT
@@ -218,4 +218,4 @@
MIT
-
\ No newline at end of file
+
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index be7f5fbf..35fb5295 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -2546,33 +2546,33 @@
},
{
"name": "symfony/yaml",
- "version": "v3.4.47",
- "version_normalized": "3.4.47.0",
+ "version": "v4.4.45",
+ "version_normalized": "4.4.45.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "88289caa3c166321883f67fe5130188ebbb47094"
+ "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094",
- "reference": "88289caa3c166321883f67fe5130188ebbb47094",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d",
+ "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8",
+ "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8"
},
"conflict": {
"symfony/console": "<3.4"
},
"require-dev": {
- "symfony/console": "~3.4|~4.0"
+ "symfony/console": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
},
- "time": "2020-10-24T10:57:07+00:00",
+ "time": "2022-08-02T15:47:23+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -2597,10 +2597,10 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Yaml Component",
+ "description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v3.4.47"
+ "source": "https://github.com/symfony/yaml/tree/v4.4.45"
},
"funding": [
{
@@ -2619,6 +2619,6 @@
"install-path": "../symfony/yaml"
}
],
- "dev": true,
+ "dev": false,
"dev-package-names": []
}
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index a89d7d47..ea637d49 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -1,19 +1,19 @@
array(
'name' => '__root__',
- 'pretty_version' => '1.0.0+no-version-set',
- 'version' => '1.0.0.0',
- 'reference' => NULL,
+ 'pretty_version' => 'dev-851-update-dependencies-extra-changes',
+ 'version' => 'dev-851-update-dependencies-extra-changes',
+ 'reference' => '2ed9efbaf8ec8d6f01db7dc7944dc35359045d9e',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
- 'dev' => true,
+ 'dev' => false,
),
'versions' => array(
'__root__' => array(
- 'pretty_version' => '1.0.0+no-version-set',
- 'version' => '1.0.0.0',
- 'reference' => NULL,
+ 'pretty_version' => 'dev-851-update-dependencies-extra-changes',
+ 'version' => 'dev-851-update-dependencies-extra-changes',
+ 'reference' => '2ed9efbaf8ec8d6f01db7dc7944dc35359045d9e',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -357,9 +357,9 @@
'dev_requirement' => false,
),
'symfony/yaml' => array(
- 'pretty_version' => 'v3.4.47',
- 'version' => '3.4.47.0',
- 'reference' => '88289caa3c166321883f67fe5130188ebbb47094',
+ 'pretty_version' => 'v4.4.45',
+ 'version' => '4.4.45.0',
+ 'reference' => 'aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/yaml',
'aliases' => array(),
diff --git a/vendor/symfony/yaml/.gitignore b/vendor/symfony/yaml/.gitignore
deleted file mode 100644
index c49a5d8d..00000000
--- a/vendor/symfony/yaml/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/yaml/CHANGELOG.md b/vendor/symfony/yaml/CHANGELOG.md
index fd41c9dd..ff78af2f 100644
--- a/vendor/symfony/yaml/CHANGELOG.md
+++ b/vendor/symfony/yaml/CHANGELOG.md
@@ -1,6 +1,53 @@
CHANGELOG
=========
+4.4.0
+-----
+
+ * Added support for parsing the inline notation spanning multiple lines.
+ * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag.
+ * deprecated accepting STDIN implicitly when using the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit.
+
+4.3.0
+-----
+
+ * Using a mapping inside a multi-line string is deprecated and will throw a `ParseException` in 5.0.
+
+4.2.0
+-----
+
+ * added support for multiple files or directories in `LintCommand`
+
+4.0.0
+-----
+
+ * The behavior of the non-specific tag `!` is changed and now forces
+ non-evaluating your values.
+ * complex mappings will throw a `ParseException`
+ * support for the comma as a group separator for floats has been dropped, use
+ the underscore instead
+ * support for the `!!php/object` tag has been dropped, use the `!php/object`
+ tag instead
+ * duplicate mapping keys throw a `ParseException`
+ * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS`
+ flag to cast them to strings
+ * `%` at the beginning of an unquoted string throw a `ParseException`
+ * mappings with a colon (`:`) that is not followed by a whitespace throw a
+ `ParseException`
+ * the `Dumper::setIndentation()` method has been removed
+ * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`,
+ `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of
+ the parser and dumper is no longer supported, pass bitmask flags instead
+ * the constructor arguments of the `Parser` class have been removed
+ * the `Inline` class is internal and no longer part of the BC promise
+ * removed support for the `!str` tag, use the `!!str` tag instead
+ * added support for tagged scalars.
+
+ ```yml
+ Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS);
+ // returns TaggedValue('foo', 'bar');
+ ```
+
3.4.0
-----
diff --git a/vendor/symfony/yaml/Command/LintCommand.php b/vendor/symfony/yaml/Command/LintCommand.php
index fb8e3e65..98eb8e15 100644
--- a/vendor/symfony/yaml/Command/LintCommand.php
+++ b/vendor/symfony/yaml/Command/LintCommand.php
@@ -14,6 +14,7 @@
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Exception\InvalidArgumentException;
use Symfony\Component\Console\Exception\RuntimeException;
+use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
@@ -38,7 +39,7 @@ class LintCommand extends Command
private $directoryIteratorProvider;
private $isReadableProvider;
- public function __construct($name = null, $directoryIteratorProvider = null, $isReadableProvider = null)
+ public function __construct(string $name = null, callable $directoryIteratorProvider = null, callable $isReadableProvider = null)
{
parent::__construct($name);
@@ -52,8 +53,8 @@ public function __construct($name = null, $directoryIteratorProvider = null, $is
protected function configure()
{
$this
- ->setDescription('Lints a file and outputs encountered errors')
- ->addArgument('filename', null, 'A file or a directory or STDIN')
+ ->setDescription('Lint a file and outputs encountered errors')
+ ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN')
->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format', 'txt')
->addOption('parse-tags', null, InputOption::VALUE_NONE, 'Parse custom tags')
->setHelp(<<cat filename | php %command.full_name%
+ cat filename | php %command.full_name% -
You can also validate the syntax of a file:
@@ -81,32 +82,41 @@ protected function configure()
protected function execute(InputInterface $input, OutputInterface $output)
{
$io = new SymfonyStyle($input, $output);
- $filename = $input->getArgument('filename');
+ $filenames = (array) $input->getArgument('filename');
$this->format = $input->getOption('format');
$this->displayCorrectFiles = $output->isVerbose();
$flags = $input->getOption('parse-tags') ? Yaml::PARSE_CUSTOM_TAGS : 0;
- if (!$filename) {
- if (!$stdin = $this->getStdin()) {
- throw new RuntimeException('Please provide a filename or pipe file content to STDIN.');
- }
-
- return $this->display($io, [$this->validate($stdin, $flags)]);
+ if (['-'] === $filenames) {
+ return $this->display($io, [$this->validate(file_get_contents('php://stdin'), $flags)]);
}
- if (!$this->isReadable($filename)) {
- throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename));
+ // @deprecated to be removed in 5.0
+ if (!$filenames) {
+ if (0 === ftell(\STDIN)) {
+ @trigger_error('Piping content from STDIN to the "lint:yaml" command without passing the dash symbol "-" as argument is deprecated since Symfony 4.4.', \E_USER_DEPRECATED);
+
+ return $this->display($io, [$this->validate(file_get_contents('php://stdin'), $flags)]);
+ }
+
+ throw new RuntimeException('Please provide a filename or pipe file content to STDIN.');
}
$filesInfo = [];
- foreach ($this->getFiles($filename) as $file) {
- $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file);
+ foreach ($filenames as $filename) {
+ if (!$this->isReadable($filename)) {
+ throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename));
+ }
+
+ foreach ($this->getFiles($filename) as $file) {
+ $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file);
+ }
}
return $this->display($io, $filesInfo);
}
- private function validate($content, $flags, $file = null)
+ private function validate(string $content, int $flags, string $file = null)
{
$prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) {
if (\E_USER_DEPRECATED === $level) {
@@ -127,7 +137,7 @@ private function validate($content, $flags, $file = null)
return ['file' => $file, 'valid' => true];
}
- private function display(SymfonyStyle $io, array $files)
+ private function display(SymfonyStyle $io, array $files): int
{
switch ($this->format) {
case 'txt':
@@ -139,10 +149,11 @@ private function display(SymfonyStyle $io, array $files)
}
}
- private function displayTxt(SymfonyStyle $io, array $filesInfo)
+ private function displayTxt(SymfonyStyle $io, array $filesInfo): int
{
$countFiles = \count($filesInfo);
$erroredFiles = 0;
+ $suggestTagOption = false;
foreach ($filesInfo as $info) {
if ($info['valid'] && $this->displayCorrectFiles) {
@@ -151,19 +162,23 @@ private function displayTxt(SymfonyStyle $io, array $filesInfo)
++$erroredFiles;
$io->text(' ERROR '.($info['file'] ? sprintf(' in %s', $info['file']) : ''));
$io->text(sprintf(' >> %s', $info['message']));
+
+ if (false !== strpos($info['message'], 'PARSE_CUSTOM_TAGS')) {
+ $suggestTagOption = true;
+ }
}
}
if (0 === $erroredFiles) {
$io->success(sprintf('All %d YAML files contain valid syntax.', $countFiles));
} else {
- $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.', $countFiles - $erroredFiles, $erroredFiles));
+ $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.%s', $countFiles - $erroredFiles, $erroredFiles, $suggestTagOption ? ' Use the --parse-tags option if you want parse custom tags.' : ''));
}
return min($erroredFiles, 1);
}
- private function displayJson(SymfonyStyle $io, array $filesInfo)
+ private function displayJson(SymfonyStyle $io, array $filesInfo): int
{
$errors = 0;
@@ -172,6 +187,10 @@ private function displayJson(SymfonyStyle $io, array $filesInfo)
if (!$v['valid']) {
++$errors;
}
+
+ if (isset($v['message']) && false !== strpos($v['message'], 'PARSE_CUSTOM_TAGS')) {
+ $v['message'] .= ' Use the --parse-tags option if you want parse custom tags.';
+ }
});
$io->writeln(json_encode($filesInfo, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES));
@@ -179,7 +198,7 @@ private function displayJson(SymfonyStyle $io, array $filesInfo)
return min($errors, 1);
}
- private function getFiles($fileOrDirectory)
+ private function getFiles(string $fileOrDirectory): iterable
{
if (is_file($fileOrDirectory)) {
yield new \SplFileInfo($fileOrDirectory);
@@ -196,24 +215,7 @@ private function getFiles($fileOrDirectory)
}
}
- /**
- * @return string|null
- */
- private function getStdin()
- {
- if (0 !== ftell(\STDIN)) {
- return null;
- }
-
- $inputs = '';
- while (!feof(\STDIN)) {
- $inputs .= fread(\STDIN, 1024);
- }
-
- return $inputs;
- }
-
- private function getParser()
+ private function getParser(): Parser
{
if (!$this->parser) {
$this->parser = new Parser();
@@ -222,7 +224,7 @@ private function getParser()
return $this->parser;
}
- private function getDirectoryIterator($directory)
+ private function getDirectoryIterator(string $directory): iterable
{
$default = function ($directory) {
return new \RecursiveIteratorIterator(
@@ -232,20 +234,20 @@ private function getDirectoryIterator($directory)
};
if (null !== $this->directoryIteratorProvider) {
- return \call_user_func($this->directoryIteratorProvider, $directory, $default);
+ return ($this->directoryIteratorProvider)($directory, $default);
}
return $default($directory);
}
- private function isReadable($fileOrDirectory)
+ private function isReadable(string $fileOrDirectory): bool
{
$default = function ($fileOrDirectory) {
return is_readable($fileOrDirectory);
};
if (null !== $this->isReadableProvider) {
- return \call_user_func($this->isReadableProvider, $fileOrDirectory, $default);
+ return ($this->isReadableProvider)($fileOrDirectory, $default);
}
return $default($fileOrDirectory);
diff --git a/vendor/symfony/yaml/Dumper.php b/vendor/symfony/yaml/Dumper.php
index 336e39c9..52db38c3 100644
--- a/vendor/symfony/yaml/Dumper.php
+++ b/vendor/symfony/yaml/Dumper.php
@@ -18,7 +18,7 @@
*
* @author Fabien Potencier
*
- * @final since version 3.4
+ * @final
*/
class Dumper
{
@@ -29,10 +29,7 @@ class Dumper
*/
protected $indentation;
- /**
- * @param int $indentation
- */
- public function __construct($indentation = 4)
+ public function __construct(int $indentation = 4)
{
if ($indentation < 1) {
throw new \InvalidArgumentException('The indentation must be greater than zero.');
@@ -41,20 +38,6 @@ public function __construct($indentation = 4)
$this->indentation = $indentation;
}
- /**
- * Sets the indentation.
- *
- * @param int $num The amount of spaces to use for indentation of nested nodes
- *
- * @deprecated since version 3.1, to be removed in 4.0. Pass the indentation to the constructor instead.
- */
- public function setIndentation($num)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since Symfony 3.1 and will be removed in 4.0. Pass the indentation to the constructor instead.', \E_USER_DEPRECATED);
-
- $this->indentation = (int) $num;
- }
-
/**
* Dumps a PHP value to YAML.
*
@@ -65,26 +48,8 @@ public function setIndentation($num)
*
* @return string The YAML representation of the PHP value
*/
- public function dump($input, $inline = 0, $indent = 0, $flags = 0)
+ public function dump($input, int $inline = 0, int $indent = 0, int $flags = 0): string
{
- if (\is_bool($flags)) {
- @trigger_error('Passing a boolean flag to toggle exception handling is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE flag instead.', \E_USER_DEPRECATED);
-
- if ($flags) {
- $flags = Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE;
- } else {
- $flags = 0;
- }
- }
-
- if (\func_num_args() >= 5) {
- @trigger_error('Passing a boolean flag to toggle object support is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::DUMP_OBJECT flag instead.', \E_USER_DEPRECATED);
-
- if (func_get_arg(4)) {
- $flags |= Yaml::DUMP_OBJECT;
- }
- }
-
$output = '';
$prefix = $indent ? str_repeat(' ', $indent) : '';
$dumpObjectAsInlineMap = true;
@@ -99,14 +64,31 @@ public function dump($input, $inline = 0, $indent = 0, $flags = 0)
$dumpAsMap = Inline::isHash($input);
foreach ($input as $key => $value) {
- if ($inline >= 1 && Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && false !== strpos($value, "\n") && false === strpos($value, "\r")) {
+ if ('' !== $output && "\n" !== $output[-1]) {
+ $output .= "\n";
+ }
+
+ if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && false !== strpos($value, "\n") && false === strpos($value, "\r")) {
// If the first line starts with a space character, the spec requires a blockIndicationIndicator
// http://www.yaml.org/spec/1.2/spec.html#id2793979
$blockIndentationIndicator = (' ' === substr($value, 0, 1)) ? (string) $this->indentation : '';
- $output .= sprintf("%s%s%s |%s\n", $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator);
+
+ if (isset($value[-2]) && "\n" === $value[-2] && "\n" === $value[-1]) {
+ $blockChompingIndicator = '+';
+ } elseif ("\n" === $value[-1]) {
+ $blockChompingIndicator = '';
+ } else {
+ $blockChompingIndicator = '-';
+ }
+
+ $output .= sprintf('%s%s%s |%s%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator, $blockChompingIndicator);
foreach (explode("\n", $value) as $row) {
- $output .= sprintf("%s%s%s\n", $prefix, str_repeat(' ', $this->indentation), $row);
+ if ('' === $row) {
+ $output .= "\n";
+ } else {
+ $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row);
+ }
}
continue;
@@ -115,20 +97,20 @@ public function dump($input, $inline = 0, $indent = 0, $flags = 0)
if ($value instanceof TaggedValue) {
$output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag());
- if ($inline >= 1 && Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && false !== strpos($value->getValue(), "\n") && false === strpos($value->getValue(), "\r\n")) {
+ if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && false !== strpos($value->getValue(), "\n") && false === strpos($value->getValue(), "\r\n")) {
// If the first line starts with a space character, the spec requires a blockIndicationIndicator
// http://www.yaml.org/spec/1.2/spec.html#id2793979
$blockIndentationIndicator = (' ' === substr($value->getValue(), 0, 1)) ? (string) $this->indentation : '';
- $output .= sprintf(" |%s\n", $blockIndentationIndicator);
+ $output .= sprintf(' |%s', $blockIndentationIndicator);
foreach (explode("\n", $value->getValue()) as $row) {
- $output .= sprintf("%s%s%s\n", $prefix, str_repeat(' ', $this->indentation), $row);
+ $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row);
}
continue;
}
- if ($inline - 1 <= 0 || null === $value->getValue() || is_scalar($value->getValue())) {
+ if ($inline - 1 <= 0 || null === $value->getValue() || \is_scalar($value->getValue())) {
$output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n";
} else {
$output .= "\n";
diff --git a/vendor/symfony/yaml/Escaper.php b/vendor/symfony/yaml/Escaper.php
index 9413d7a2..9b809df8 100644
--- a/vendor/symfony/yaml/Escaper.php
+++ b/vendor/symfony/yaml/Escaper.php
@@ -22,13 +22,13 @@
class Escaper
{
// Characters that would cause a dumped string to require double quoting.
- const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\x7f|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9";
+ public const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\x7f|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9";
// Mapping arrays for escaping a double quoted string. The backslash is
// first to ensure proper escaping because str_replace operates iteratively
// on the input arrays. This ordering of the characters avoids the use of strtr,
// which performs more slowly.
- private static $escapees = ['\\', '\\\\', '\\"', '"',
+ private const ESCAPEES = ['\\', '\\\\', '\\"', '"',
"\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07",
"\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f",
"\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17",
@@ -36,7 +36,7 @@ class Escaper
"\x7f",
"\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9",
];
- private static $escaped = ['\\\\', '\\"', '\\\\', '\\"',
+ private const ESCAPED = ['\\\\', '\\"', '\\\\', '\\"',
'\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a',
'\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f',
'\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17',
@@ -52,7 +52,7 @@ class Escaper
*
* @return bool True if the value would require double quotes
*/
- public static function requiresDoubleQuoting($value)
+ public static function requiresDoubleQuoting(string $value): bool
{
return 0 < preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value);
}
@@ -64,9 +64,9 @@ public static function requiresDoubleQuoting($value)
*
* @return string The quoted, escaped string
*/
- public static function escapeWithDoubleQuotes($value)
+ public static function escapeWithDoubleQuotes(string $value): string
{
- return sprintf('"%s"', str_replace(self::$escapees, self::$escaped, $value));
+ return sprintf('"%s"', str_replace(self::ESCAPEES, self::ESCAPED, $value));
}
/**
@@ -76,7 +76,7 @@ public static function escapeWithDoubleQuotes($value)
*
* @return bool True if the value would require single quotes
*/
- public static function requiresSingleQuoting($value)
+ public static function requiresSingleQuoting(string $value): bool
{
// Determines if a PHP value is entirely composed of a value that would
// require single quoting in YAML.
@@ -86,7 +86,7 @@ public static function requiresSingleQuoting($value)
// Determines if the PHP value contains any single characters that would
// cause it to require single quoting in YAML.
- return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` ]/x', $value);
+ return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` \p{Zs}]/xu', $value);
}
/**
@@ -96,7 +96,7 @@ public static function requiresSingleQuoting($value)
*
* @return string The quoted, escaped string
*/
- public static function escapeWithSingleQuotes($value)
+ public static function escapeWithSingleQuotes(string $value): string
{
return sprintf("'%s'", str_replace('\'', '\'\'', $value));
}
diff --git a/vendor/symfony/yaml/Exception/ExceptionInterface.php b/vendor/symfony/yaml/Exception/ExceptionInterface.php
index ad850eea..90913168 100644
--- a/vendor/symfony/yaml/Exception/ExceptionInterface.php
+++ b/vendor/symfony/yaml/Exception/ExceptionInterface.php
@@ -16,6 +16,6 @@
*
* @author Fabien Potencier
*/
-interface ExceptionInterface
+interface ExceptionInterface extends \Throwable
{
}
diff --git a/vendor/symfony/yaml/Exception/ParseException.php b/vendor/symfony/yaml/Exception/ParseException.php
index 4207d9ab..82c05a71 100644
--- a/vendor/symfony/yaml/Exception/ParseException.php
+++ b/vendor/symfony/yaml/Exception/ParseException.php
@@ -24,13 +24,12 @@ class ParseException extends RuntimeException
private $rawMessage;
/**
- * @param string $message The error message
- * @param int $parsedLine The line where the error occurred
- * @param string|null $snippet The snippet of code near the problem
- * @param string|null $parsedFile The file name where the error occurred
- * @param \Exception|null $previous The previous exception
+ * @param string $message The error message
+ * @param int $parsedLine The line where the error occurred
+ * @param string|null $snippet The snippet of code near the problem
+ * @param string|null $parsedFile The file name where the error occurred
*/
- public function __construct($message, $parsedLine = -1, $snippet = null, $parsedFile = null, \Exception $previous = null)
+ public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Throwable $previous = null)
{
$this->parsedFile = $parsedFile;
$this->parsedLine = $parsedLine;
diff --git a/vendor/symfony/yaml/Inline.php b/vendor/symfony/yaml/Inline.php
index 64ac48a9..1d4bbda6 100644
--- a/vendor/symfony/yaml/Inline.php
+++ b/vendor/symfony/yaml/Inline.php
@@ -24,7 +24,7 @@
*/
class Inline
{
- const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')';
+ public const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')';
public static $parsedLineNumber = -1;
public static $parsedFilename;
@@ -34,12 +34,7 @@ class Inline
private static $objectForMap = false;
private static $constantSupport = false;
- /**
- * @param int $flags
- * @param int|null $parsedLineNumber
- * @param string|null $parsedFilename
- */
- public static function initialize($flags, $parsedLineNumber = null, $parsedFilename = null)
+ public static function initialize(int $flags, int $parsedLineNumber = null, string $parsedFilename = null)
{
self::$exceptionOnInvalidType = (bool) (Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE & $flags);
self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags);
@@ -63,40 +58,8 @@ public static function initialize($flags, $parsedLineNumber = null, $parsedFilen
*
* @throws ParseException
*/
- public static function parse($value, $flags = 0, $references = [])
+ public static function parse(string $value = null, int $flags = 0, array &$references = [])
{
- if (\is_bool($flags)) {
- @trigger_error('Passing a boolean flag to toggle exception handling is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE flag instead.', \E_USER_DEPRECATED);
-
- if ($flags) {
- $flags = Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE;
- } else {
- $flags = 0;
- }
- }
-
- if (\func_num_args() >= 3 && !\is_array($references)) {
- @trigger_error('Passing a boolean flag to toggle object support is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::PARSE_OBJECT flag instead.', \E_USER_DEPRECATED);
-
- if ($references) {
- $flags |= Yaml::PARSE_OBJECT;
- }
-
- if (\func_num_args() >= 4) {
- @trigger_error('Passing a boolean flag to toggle object for map support is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::PARSE_OBJECT_FOR_MAP flag instead.', \E_USER_DEPRECATED);
-
- if (func_get_arg(3)) {
- $flags |= Yaml::PARSE_OBJECT_FOR_MAP;
- }
- }
-
- if (\func_num_args() >= 5) {
- $references = func_get_arg(4);
- } else {
- $references = [];
- }
- }
-
self::initialize($flags);
$value = trim($value);
@@ -105,7 +68,7 @@ public static function parse($value, $flags = 0, $references = [])
return '';
}
- if (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) {
+ if (2 /* MB_OVERLOAD_STRING */ & (int) \ini_get('mbstring.func_overload')) {
$mbEncoding = mb_internal_encoding();
mb_internal_encoding('ASCII');
}
@@ -131,7 +94,7 @@ public static function parse($value, $flags = 0, $references = [])
throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
}
- if (null !== $tag) {
+ if (null !== $tag && '' !== $tag) {
return new TaggedValue($tag, $result);
}
@@ -153,35 +116,19 @@ public static function parse($value, $flags = 0, $references = [])
*
* @throws DumpException When trying to dump PHP resource
*/
- public static function dump($value, $flags = 0)
+ public static function dump($value, int $flags = 0): string
{
- if (\is_bool($flags)) {
- @trigger_error('Passing a boolean flag to toggle exception handling is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE flag instead.', \E_USER_DEPRECATED);
-
- if ($flags) {
- $flags = Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE;
- } else {
- $flags = 0;
- }
- }
-
- if (\func_num_args() >= 3) {
- @trigger_error('Passing a boolean flag to toggle object support is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::DUMP_OBJECT flag instead.', \E_USER_DEPRECATED);
-
- if (func_get_arg(2)) {
- $flags |= Yaml::DUMP_OBJECT;
- }
- }
-
switch (true) {
case \is_resource($value):
if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) {
throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
}
- return 'null';
+ return self::dumpNull($flags);
case $value instanceof \DateTimeInterface:
return $value->format('c');
+ case $value instanceof \UnitEnum:
+ return sprintf('!php/const %s::%s', \get_class($value), $value->name);
case \is_object($value):
if ($value instanceof TaggedValue) {
return '!'.$value->getTag().' '.self::dump($value->getValue(), $flags);
@@ -192,25 +139,31 @@ public static function dump($value, $flags = 0)
}
if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) {
- return self::dumpArray($value, $flags & ~Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE);
+ $output = [];
+
+ foreach ($value as $key => $val) {
+ $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags));
+ }
+
+ return sprintf('{ %s }', implode(', ', $output));
}
if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) {
throw new DumpException('Object support when dumping a YAML file has been disabled.');
}
- return 'null';
+ return self::dumpNull($flags);
case \is_array($value):
return self::dumpArray($value, $flags);
case null === $value:
- return 'null';
+ return self::dumpNull($flags);
case true === $value:
return 'true';
case false === $value:
return 'false';
- case ctype_digit($value):
- return \is_string($value) ? "'$value'" : (int) $value;
- case is_numeric($value) && false === strpos($value, "\f") && false === strpos($value, "\n") && false === strpos($value, "\r") && false === strpos($value, "\t") && false === strpos($value, "\v"):
+ case \is_int($value):
+ return $value;
+ case is_numeric($value) && false === strpbrk($value, "\f\n\r\t\v"):
$locale = setlocale(\LC_NUMERIC, 0);
if (false !== $locale) {
setlocale(\LC_NUMERIC, 'C');
@@ -250,13 +203,11 @@ public static function dump($value, $flags = 0)
/**
* Check if given array is hash or just normal indexed array.
*
- * @internal
- *
* @param array|\ArrayObject|\stdClass $value The PHP array or array-like object to check
*
* @return bool true if value is hash array, false otherwise
*/
- public static function isHash($value)
+ public static function isHash($value): bool
{
if ($value instanceof \stdClass || $value instanceof \ArrayObject) {
return true;
@@ -281,7 +232,7 @@ public static function isHash($value)
*
* @return string The YAML string representing the PHP array
*/
- private static function dumpArray($value, $flags)
+ private static function dumpArray(array $value, int $flags): string
{
// array
if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) {
@@ -302,30 +253,31 @@ private static function dumpArray($value, $flags)
return sprintf('{ %s }', implode(', ', $output));
}
+ private static function dumpNull(int $flags): string
+ {
+ if (Yaml::DUMP_NULL_AS_TILDE & $flags) {
+ return '~';
+ }
+
+ return 'null';
+ }
+
/**
* Parses a YAML scalar.
*
- * @param string $scalar
- * @param int $flags
- * @param string[] $delimiters
- * @param int &$i
- * @param bool $evaluate
- * @param array $references
- *
- * @return string
+ * @return mixed
*
* @throws ParseException When malformed inline YAML string is parsed
- *
- * @internal
*/
- public static function parseScalar($scalar, $flags = 0, $delimiters = null, &$i = 0, $evaluate = true, $references = [], $legacyOmittedKeySupport = false)
+ public static function parseScalar(string $scalar, int $flags = 0, array $delimiters = null, int &$i = 0, bool $evaluate = true, array &$references = [], bool &$isQuoted = null)
{
if (\in_array($scalar[$i], ['"', "'"])) {
// quoted scalar
+ $isQuoted = true;
$output = self::parseQuotedScalar($scalar, $i);
if (null !== $delimiters) {
- $tmp = ltrim(substr($scalar, $i), ' ');
+ $tmp = ltrim(substr($scalar, $i), " \n");
if ('' === $tmp) {
throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
}
@@ -335,6 +287,8 @@ public static function parseScalar($scalar, $flags = 0, $delimiters = null, &$i
}
} else {
// "normal" string
+ $isQuoted = false;
+
if (!$delimiters) {
$output = substr($scalar, $i);
$i += \strlen($output);
@@ -343,24 +297,21 @@ public static function parseScalar($scalar, $flags = 0, $delimiters = null, &$i
if (Parser::preg_match('/[ \t]+#/', $output, $match, \PREG_OFFSET_CAPTURE)) {
$output = substr($output, 0, $match[0][1]);
}
- } elseif (Parser::preg_match('/^(.'.($legacyOmittedKeySupport ? '+' : '*').'?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) {
+ } elseif (Parser::preg_match('/^(.*?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) {
$output = $match[1];
$i += \strlen($output);
+ $output = trim($output);
} else {
throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename);
}
// a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >)
- if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0])) {
+ if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0] || '%' === $output[0])) {
throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename);
}
- if ($output && '%' === $output[0]) {
- @trigger_error(self::getDeprecationMessage(sprintf('Not quoting the scalar "%s" starting with the "%%" indicator character is deprecated since Symfony 3.1 and will throw a ParseException in 4.0.', $output)), \E_USER_DEPRECATED);
- }
-
if ($evaluate) {
- $output = self::evaluateScalar($output, $flags, $references);
+ $output = self::evaluateScalar($output, $flags, $references, $isQuoted);
}
}
@@ -370,14 +321,9 @@ public static function parseScalar($scalar, $flags = 0, $delimiters = null, &$i
/**
* Parses a YAML quoted scalar.
*
- * @param string $scalar
- * @param int &$i
- *
- * @return string
- *
* @throws ParseException When malformed inline YAML string is parsed
*/
- private static function parseQuotedScalar($scalar, &$i)
+ private static function parseQuotedScalar(string $scalar, int &$i = 0): string
{
if (!Parser::preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) {
throw new ParseException(sprintf('Malformed inline YAML string: "%s".', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
@@ -400,16 +346,9 @@ private static function parseQuotedScalar($scalar, &$i)
/**
* Parses a YAML sequence.
*
- * @param string $sequence
- * @param int $flags
- * @param int &$i
- * @param array $references
- *
- * @return array
- *
* @throws ParseException When malformed inline YAML string is parsed
*/
- private static function parseSequence($sequence, $flags, &$i = 0, $references = [])
+ private static function parseSequence(string $sequence, int $flags, int &$i = 0, array &$references = []): array
{
$output = [];
$len = \strlen($sequence);
@@ -437,8 +376,7 @@ private static function parseSequence($sequence, $flags, &$i = 0, $references =
$value = self::parseMapping($sequence, $flags, $i, $references);
break;
default:
- $isQuoted = \in_array($sequence[$i], ['"', "'"]);
- $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references);
+ $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references, $isQuoted);
// the value can be an array if a reference has been resolved to an array var
if (\is_string($value) && !$isQuoted && false !== strpos($value, ': ')) {
@@ -451,10 +389,15 @@ private static function parseSequence($sequence, $flags, &$i = 0, $references =
}
}
+ if (!$isQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) {
+ $references[$matches['ref']] = $matches['value'];
+ $value = $matches['value'];
+ }
+
--$i;
}
- if (null !== $tag) {
+ if (null !== $tag && '' !== $tag) {
$value = new TaggedValue($tag, $value);
}
@@ -469,16 +412,11 @@ private static function parseSequence($sequence, $flags, &$i = 0, $references =
/**
* Parses a YAML mapping.
*
- * @param string $mapping
- * @param int $flags
- * @param int &$i
- * @param array $references
- *
* @return array|\stdClass
*
* @throws ParseException When malformed inline YAML string is parsed
*/
- private static function parseMapping($mapping, $flags, &$i = 0, $references = [])
+ private static function parseMapping(string $mapping, int $flags, int &$i = 0, array &$references = [])
{
$output = [];
$len = \strlen($mapping);
@@ -490,6 +428,7 @@ private static function parseMapping($mapping, $flags, &$i = 0, $references = []
switch ($mapping[$i]) {
case ' ':
case ',':
+ case "\n":
++$i;
continue 2;
case '}':
@@ -501,37 +440,33 @@ private static function parseMapping($mapping, $flags, &$i = 0, $references = []
}
// key
+ $offsetBeforeKeyParsing = $i;
$isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true);
- $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false, [], true);
+ $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false);
- if ('!php/const' === $key) {
- $key .= self::parseScalar($mapping, $flags, [':', ' '], $i, false, [], true);
- if ('!php/const:' === $key && ':' !== $mapping[$i]) {
- $key = '';
- --$i;
- } else {
- $key = self::evaluateScalar($key, $flags);
- }
+ if ($offsetBeforeKeyParsing === $i) {
+ throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping);
}
- if (':' !== $key && false === $i = strpos($mapping, ':', $i)) {
- break;
+ if ('!php/const' === $key) {
+ $key .= ' '.self::parseScalar($mapping, $flags, [':'], $i, false);
+ $key = self::evaluateScalar($key, $flags);
}
- if (':' === $key) {
- @trigger_error(self::getDeprecationMessage('Omitting the key of a mapping is deprecated and will throw a ParseException in 4.0.'), \E_USER_DEPRECATED);
+ if (false === $i = strpos($mapping, ':', $i)) {
+ break;
}
if (!$isKeyQuoted) {
$evaluatedKey = self::evaluateScalar($key, $flags, $references);
if ('' !== $key && $evaluatedKey !== $key && !\is_string($evaluatedKey) && !\is_int($evaluatedKey)) {
- @trigger_error(self::getDeprecationMessage('Implicit casting of incompatible mapping keys to strings is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0. Quote your evaluable mapping keys instead.'), \E_USER_DEPRECATED);
+ throw new ParseException('Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead.', self::$parsedLineNumber + 1, $mapping);
}
}
- if (':' !== $key && !$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}'], true))) {
- @trigger_error(self::getDeprecationMessage('Using a colon after an unquoted mapping key that is not followed by an indication character (i.e. " ", ",", "[", "]", "{", "}") is deprecated since Symfony 3.2 and will throw a ParseException in 4.0.'), \E_USER_DEPRECATED);
+ if (!$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}', "\n"], true))) {
+ throw new ParseException('Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}").', self::$parsedLineNumber + 1, $mapping);
}
if ('<<' === $key) {
@@ -539,7 +474,7 @@ private static function parseMapping($mapping, $flags, &$i = 0, $references = []
}
while ($i < $len) {
- if (':' === $mapping[$i] || ' ' === $mapping[$i]) {
+ if (':' === $mapping[$i] || ' ' === $mapping[$i] || "\n" === $mapping[$i]) {
++$i;
continue;
@@ -565,7 +500,7 @@ private static function parseMapping($mapping, $flags, &$i = 0, $references = []
$output[$key] = $value;
}
} elseif (isset($output[$key])) {
- @trigger_error(self::getDeprecationMessage(sprintf('Duplicate key "%s" detected whilst parsing YAML. Silent handling of duplicate mapping keys in YAML is deprecated since Symfony 3.2 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0.', $key)), \E_USER_DEPRECATED);
+ throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping);
}
break;
case '{':
@@ -584,11 +519,11 @@ private static function parseMapping($mapping, $flags, &$i = 0, $references = []
$output[$key] = $value;
}
} elseif (isset($output[$key])) {
- @trigger_error(self::getDeprecationMessage(sprintf('Duplicate key "%s" detected whilst parsing YAML. Silent handling of duplicate mapping keys in YAML is deprecated since Symfony 3.2 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0.', $key)), \E_USER_DEPRECATED);
+ throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping);
}
break;
default:
- $value = self::parseScalar($mapping, $flags, [',', '}'], $i, null === $tag, $references);
+ $value = self::parseScalar($mapping, $flags, [',', '}', "\n"], $i, null === $tag, $references, $isValueQuoted);
// Spec: Keys MUST be unique; first one wins.
// Parser cannot abort this mapping earlier, since lines
// are processed sequentially.
@@ -596,13 +531,18 @@ private static function parseMapping($mapping, $flags, &$i = 0, $references = []
if ('<<' === $key) {
$output += $value;
} elseif ($allowOverwrite || !isset($output[$key])) {
+ if (!$isValueQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) {
+ $references[$matches['ref']] = $matches['value'];
+ $value = $matches['value'];
+ }
+
if (null !== $tag) {
$output[$key] = new TaggedValue($tag, $value);
} else {
$output[$key] = $value;
}
} elseif (isset($output[$key])) {
- @trigger_error(self::getDeprecationMessage(sprintf('Duplicate key "%s" detected whilst parsing YAML. Silent handling of duplicate mapping keys in YAML is deprecated since Symfony 3.2 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0.', $key)), \E_USER_DEPRECATED);
+ throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping);
}
--$i;
}
@@ -618,16 +558,13 @@ private static function parseMapping($mapping, $flags, &$i = 0, $references = []
/**
* Evaluates scalars and replaces magic values.
*
- * @param string $scalar
- * @param int $flags
- * @param array $references
- *
* @return mixed The evaluated YAML string
*
* @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved
*/
- private static function evaluateScalar($scalar, $flags, $references = [])
+ private static function evaluateScalar(string $scalar, int $flags, array &$references = [], bool &$isQuotedString = null)
{
+ $isQuotedString = false;
$scalar = trim($scalar);
$scalarLower = strtolower($scalar);
@@ -661,40 +598,17 @@ private static function evaluateScalar($scalar, $flags, $references = [])
return false;
case '!' === $scalar[0]:
switch (true) {
- case 0 === strpos($scalar, '!str'):
- @trigger_error(self::getDeprecationMessage('Support for the !str tag is deprecated since Symfony 3.4. Use the !!str tag instead.'), \E_USER_DEPRECATED);
-
- return (string) substr($scalar, 5);
case 0 === strpos($scalar, '!!str '):
- return (string) substr($scalar, 6);
- case 0 === strpos($scalar, '! '):
- @trigger_error(self::getDeprecationMessage('Using the non-specific tag "!" is deprecated since Symfony 3.4 as its behavior will change in 4.0. It will force non-evaluating your values in 4.0. Use plain integers or !!float instead.'), \E_USER_DEPRECATED);
-
- return (int) self::parseScalar(substr($scalar, 2), $flags);
- case 0 === strpos($scalar, '!php/object:'):
- if (self::$objectSupport) {
- @trigger_error(self::getDeprecationMessage('The !php/object: tag to indicate dumped PHP objects is deprecated since Symfony 3.4 and will be removed in 4.0. Use the !php/object (without the colon) tag instead.'), \E_USER_DEPRECATED);
+ $s = (string) substr($scalar, 6);
- return unserialize(substr($scalar, 12));
+ if (\in_array($s[0] ?? '', ['"', "'"], true)) {
+ $isQuotedString = true;
+ $s = self::parseQuotedScalar($s);
}
- if (self::$exceptionOnInvalidType) {
- throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
- }
-
- return null;
- case 0 === strpos($scalar, '!!php/object:'):
- if (self::$objectSupport) {
- @trigger_error(self::getDeprecationMessage('The !!php/object: tag to indicate dumped PHP objects is deprecated since Symfony 3.1 and will be removed in 4.0. Use the !php/object (without the colon) tag instead.'), \E_USER_DEPRECATED);
-
- return unserialize(substr($scalar, 13));
- }
-
- if (self::$exceptionOnInvalidType) {
- throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
- }
-
- return null;
+ return $s;
+ case 0 === strpos($scalar, '! '):
+ return substr($scalar, 2);
case 0 === strpos($scalar, '!php/object'):
if (self::$objectSupport) {
if (!isset($scalar[12])) {
@@ -708,21 +622,6 @@ private static function evaluateScalar($scalar, $flags, $references = [])
throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
}
- return null;
- case 0 === strpos($scalar, '!php/const:'):
- if (self::$constantSupport) {
- @trigger_error(self::getDeprecationMessage('The !php/const: tag to indicate dumped PHP constants is deprecated since Symfony 3.4 and will be removed in 4.0. Use the !php/const (without the colon) tag instead.'), \E_USER_DEPRECATED);
-
- if (\defined($const = substr($scalar, 11))) {
- return \constant($const);
- }
-
- throw new ParseException(sprintf('The constant "%s" is not defined.', $const), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
- }
- if (self::$exceptionOnInvalidType) {
- throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
- }
-
return null;
case 0 === strpos($scalar, '!php/const'):
if (self::$constantSupport) {
@@ -747,14 +646,14 @@ private static function evaluateScalar($scalar, $flags, $references = [])
case 0 === strpos($scalar, '!!binary '):
return self::evaluateBinaryScalar(substr($scalar, 9));
default:
- @trigger_error(self::getDeprecationMessage(sprintf('Using the unquoted scalar value "%s" is deprecated since Symfony 3.3 and will be considered as a tagged value in 4.0. You must quote it.', $scalar)), \E_USER_DEPRECATED);
+ throw new ParseException(sprintf('The string "%s" could not be parsed as it uses an unsupported built-in tag.', $scalar), self::$parsedLineNumber, $scalar, self::$parsedFilename);
}
// Optimize for returning strings.
// no break
case '+' === $scalar[0] || '-' === $scalar[0] || '.' === $scalar[0] || is_numeric($scalar[0]):
if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) {
- $scalar = str_replace('_', '', (string) $scalar);
+ $scalar = str_replace('_', '', $scalar);
}
switch (true) {
@@ -784,78 +683,72 @@ private static function evaluateScalar($scalar, $flags, $references = [])
return -log(0);
case '-.inf' === $scalarLower:
return log(0);
- case Parser::preg_match('/^(-|\+)?[0-9][0-9,]*(\.[0-9_]+)?$/', $scalar):
case Parser::preg_match('/^(-|\+)?[0-9][0-9_]*(\.[0-9_]+)?$/', $scalar):
- if (false !== strpos($scalar, ',')) {
- @trigger_error(self::getDeprecationMessage('Using the comma as a group separator for floats is deprecated since Symfony 3.2 and will be removed in 4.0.'), \E_USER_DEPRECATED);
- }
-
- return (float) str_replace([',', '_'], '', $scalar);
+ return (float) str_replace('_', '', $scalar);
case Parser::preg_match(self::getTimestampRegex(), $scalar):
+ // When no timezone is provided in the parsed date, YAML spec says we must assume UTC.
+ $time = new \DateTime($scalar, new \DateTimeZone('UTC'));
+
if (Yaml::PARSE_DATETIME & $flags) {
- // When no timezone is provided in the parsed date, YAML spec says we must assume UTC.
- return new \DateTime($scalar, new \DateTimeZone('UTC'));
+ return $time;
}
- $timeZone = date_default_timezone_get();
- date_default_timezone_set('UTC');
- $time = strtotime($scalar);
- date_default_timezone_set($timeZone);
+ try {
+ if (false !== $scalar = $time->getTimestamp()) {
+ return $scalar;
+ }
+ } catch (\ValueError $e) {
+ // no-op
+ }
- return $time;
+ return $time->format('U');
}
}
return (string) $scalar;
}
- /**
- * @param string $value
- * @param int &$i
- * @param int $flags
- *
- * @return string|null
- */
- private static function parseTag($value, &$i, $flags)
+ private static function parseTag(string $value, int &$i, int $flags): ?string
{
if ('!' !== $value[$i]) {
return null;
}
- $tagLength = strcspn($value, " \t\n", $i + 1);
+ $tagLength = strcspn($value, " \t\n[]{},", $i + 1);
$tag = substr($value, $i + 1, $tagLength);
$nextOffset = $i + $tagLength + 1;
$nextOffset += strspn($value, ' ', $nextOffset);
- // Is followed by a scalar
- if ((!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && 'tagged' !== $tag) {
- // Manage non-whitelisted scalars in {@link self::evaluateScalar()}
+ if ('' === $tag && (!isset($value[$nextOffset]) || \in_array($value[$nextOffset], [']', '}', ','], true))) {
+ throw new ParseException('Using the unquoted scalar value "!" is not supported. You must quote it.', self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+ }
+
+ // Is followed by a scalar and is a built-in tag
+ if ('' !== $tag && (!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && ('!' === $tag[0] || 'str' === $tag || 'php/const' === $tag || 'php/object' === $tag)) {
+ // Manage in {@link self::evaluateScalar()}
return null;
}
+ $i = $nextOffset;
+
// Built-in tags
- if ($tag && '!' === $tag[0]) {
+ if ('' !== $tag && '!' === $tag[0]) {
throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
}
- if (Yaml::PARSE_CUSTOM_TAGS & $flags) {
- $i = $nextOffset;
+ if ('' !== $tag && !isset($value[$i])) {
+ throw new ParseException(sprintf('Missing value for tag "%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+ }
+ if ('' === $tag || Yaml::PARSE_CUSTOM_TAGS & $flags) {
return $tag;
}
- throw new ParseException(sprintf('Tags support is not enabled. Enable the `Yaml::PARSE_CUSTOM_TAGS` flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
+ throw new ParseException(sprintf('Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
}
- /**
- * @param string $scalar
- *
- * @return string
- *
- * @internal
- */
- public static function evaluateBinaryScalar($scalar)
+ public static function evaluateBinaryScalar(string $scalar): string
{
$parsedBinaryData = self::parseScalar(preg_replace('/\s/', '', $scalar));
@@ -870,7 +763,7 @@ public static function evaluateBinaryScalar($scalar)
return base64_decode($parsedBinaryData, true);
}
- private static function isBinaryString($value)
+ private static function isBinaryString(string $value)
{
return !preg_match('//u', $value) || preg_match('/[^\x00\x07-\x0d\x1B\x20-\xff]/', $value);
}
@@ -882,7 +775,7 @@ private static function isBinaryString($value)
*
* @see http://www.yaml.org/spec/1.2/spec.html#id2761573
*/
- private static function getTimestampRegex()
+ private static function getTimestampRegex(): string
{
return <<
*
- * @final since version 3.4
+ * @final
*/
class Parser
{
- const TAG_PATTERN = '(?P![\w!.\/:-]+)';
- const BLOCK_SCALAR_HEADER_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?';
+ public const TAG_PATTERN = '(?P![\w!.\/:-]+)';
+ public const BLOCK_SCALAR_HEADER_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?';
+ public const REFERENCE_PATTERN = '#^&(?P[[^ ]++) *+(?P.*)#u';
private $filename;
private $offset = 0;
@@ -37,21 +38,6 @@ class Parser
private $locallySkippedLineNumbers = [];
private $refsBeingParsed = [];
- public function __construct()
- {
- if (\func_num_args() > 0) {
- @trigger_error(sprintf('The constructor arguments $offset, $totalNumberOfLines, $skippedLineNumbers of %s are deprecated and will be removed in 4.0', self::class), \E_USER_DEPRECATED);
-
- $this->offset = func_get_arg(0);
- if (\func_num_args() > 1) {
- $this->totalNumberOfLines = func_get_arg(1);
- }
- if (\func_num_args() > 2) {
- $this->skippedLineNumbers = func_get_arg(2);
- }
- }
- }
-
/**
* Parses a YAML file into a PHP value.
*
@@ -62,7 +48,7 @@ public function __construct()
*
* @throws ParseException If the file could not be read or the YAML is not valid
*/
- public function parseFile($filename, $flags = 0)
+ public function parseFile(string $filename, int $flags = 0)
{
if (!is_file($filename)) {
throw new ParseException(sprintf('File "%s" does not exist.', $filename));
@@ -91,38 +77,8 @@ public function parseFile($filename, $flags = 0)
*
* @throws ParseException If the YAML is not valid
*/
- public function parse($value, $flags = 0)
+ public function parse(string $value, int $flags = 0)
{
- if (\is_bool($flags)) {
- @trigger_error('Passing a boolean flag to toggle exception handling is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE flag instead.', \E_USER_DEPRECATED);
-
- if ($flags) {
- $flags = Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE;
- } else {
- $flags = 0;
- }
- }
-
- if (\func_num_args() >= 3) {
- @trigger_error('Passing a boolean flag to toggle object support is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::PARSE_OBJECT flag instead.', \E_USER_DEPRECATED);
-
- if (func_get_arg(2)) {
- $flags |= Yaml::PARSE_OBJECT;
- }
- }
-
- if (\func_num_args() >= 4) {
- @trigger_error('Passing a boolean flag to toggle object for map support is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::PARSE_OBJECT_FOR_MAP flag instead.', \E_USER_DEPRECATED);
-
- if (func_get_arg(3)) {
- $flags |= Yaml::PARSE_OBJECT_FOR_MAP;
- }
- }
-
- if (Yaml::PARSE_KEYS_AS_STRINGS & $flags) {
- @trigger_error('Using the Yaml::PARSE_KEYS_AS_STRINGS flag is deprecated since Symfony 3.4 as it will be removed in 4.0. Quote your keys when they are evaluable instead.', \E_USER_DEPRECATED);
- }
-
if (false === preg_match('//u', $value)) {
throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename);
}
@@ -130,39 +86,32 @@ public function parse($value, $flags = 0)
$this->refs = [];
$mbEncoding = null;
- $e = null;
- $data = null;
- if (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) {
+ if (2 /* MB_OVERLOAD_STRING */ & (int) \ini_get('mbstring.func_overload')) {
$mbEncoding = mb_internal_encoding();
mb_internal_encoding('UTF-8');
}
try {
$data = $this->doParse($value, $flags);
- } catch (\Exception $e) {
- } catch (\Throwable $e) {
- }
-
- if (null !== $mbEncoding) {
- mb_internal_encoding($mbEncoding);
- }
-
- $this->lines = [];
- $this->currentLine = '';
- $this->refs = [];
- $this->skippedLineNumbers = [];
- $this->locallySkippedLineNumbers = [];
- $this->totalNumberOfLines = null;
-
- if (null !== $e) {
- throw $e;
+ } finally {
+ if (null !== $mbEncoding) {
+ mb_internal_encoding($mbEncoding);
+ }
+ $this->refsBeingParsed = [];
+ $this->offset = 0;
+ $this->lines = [];
+ $this->currentLine = '';
+ $this->refs = [];
+ $this->skippedLineNumbers = [];
+ $this->locallySkippedLineNumbers = [];
+ $this->totalNumberOfLines = null;
}
return $data;
}
- private function doParse($value, $flags)
+ private function doParse(string $value, int $flags)
{
$this->currentLineNb = -1;
$this->currentLine = '';
@@ -206,25 +155,34 @@ private function doParse($value, $flags)
Inline::initialize($flags, $this->getRealCurrentLineNb(), $this->filename);
$isRef = $mergeNode = false;
- if (self::preg_match('#^\-((?P\s+)(?P.+))?$#u', rtrim($this->currentLine), $values)) {
+ if ('-' === $this->currentLine[0] && self::preg_match('#^\-((?P\s+)(?P.+))?$#u', rtrim($this->currentLine), $values)) {
if ($context && 'mapping' == $context) {
throw new ParseException('You cannot define a sequence item when in a mapping.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
}
$context = 'sequence';
- if (isset($values['value']) && self::preg_match('#^&(?P][[^ ]+) *(?P.*)#u', $values['value'], $matches)) {
+ if (isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) {
$isRef = $matches['ref'];
$this->refsBeingParsed[] = $isRef;
$values['value'] = $matches['value'];
}
if (isset($values['value'][1]) && '?' === $values['value'][0] && ' ' === $values['value'][1]) {
- @trigger_error($this->getDeprecationMessage('Starting an unquoted string with a question mark followed by a space is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0.'), \E_USER_DEPRECATED);
+ throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
}
// array
- if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
- $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags);
+ if (isset($values['value']) && 0 === strpos(ltrim($values['value'], ' '), '-')) {
+ // Inline first child
+ $currentLineNumber = $this->getRealCurrentLineNb();
+
+ $sequenceIndentation = \strlen($values['leadspaces']) + 1;
+ $sequenceYaml = substr($this->currentLine, $sequenceIndentation);
+ $sequenceYaml .= "\n".$this->getNextEmbedBlock($sequenceIndentation, true);
+
+ $data[] = $this->parseBlock($currentLineNumber, rtrim($sequenceYaml), $flags);
+ } elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
+ $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true) ?? '', $flags);
} elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) {
$data[] = new TaggedValue(
$subTag,
@@ -254,7 +212,7 @@ private function doParse($value, $flags)
array_pop($this->refsBeingParsed);
}
} elseif (
- self::preg_match('#^(?P(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(\s++(?P.+))?$#u', rtrim($this->currentLine), $values)
+ self::preg_match('#^(?P(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(( |\t)++(?P.+))?$#u', rtrim($this->currentLine), $values)
&& (false === strpos($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"]))
) {
if ($context && 'sequence' == $context) {
@@ -263,15 +221,7 @@ private function doParse($value, $flags)
$context = 'mapping';
try {
- $i = 0;
- $evaluateKey = !(Yaml::PARSE_KEYS_AS_STRINGS & $flags);
-
- // constants in key will be evaluated anyway
- if (isset($values['key'][0]) && '!' === $values['key'][0] && Yaml::PARSE_CONSTANT & $flags) {
- $evaluateKey = true;
- }
-
- $key = Inline::parseScalar($values['key'], 0, null, $i, $evaluateKey);
+ $key = Inline::parseScalar($values['key']);
} catch (ParseException $e) {
$e->setParsedLine($this->getRealCurrentLineNb() + 1);
$e->setSnippet($this->currentLine);
@@ -280,8 +230,7 @@ private function doParse($value, $flags)
}
if (!\is_string($key) && !\is_int($key)) {
- $keyType = is_numeric($key) ? 'numeric key' : 'non-string key';
- @trigger_error($this->getDeprecationMessage(sprintf('Implicit casting of %s to string is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0. Quote your evaluable mapping keys instead.', $keyType)), \E_USER_DEPRECATED);
+ throw new ParseException((is_numeric($key) ? 'Numeric' : 'Non-string').' keys are not supported. Quote your evaluable mapping keys instead.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
}
// Convert float keys to strings, to avoid being converted to integers by PHP
@@ -289,14 +238,14 @@ private function doParse($value, $flags)
$key = (string) $key;
}
- if ('<<' === $key && (!isset($values['value']) || !self::preg_match('#^&(?P][[^ ]+)#u', $values['value'], $refMatches))) {
+ if ('<<' === $key && (!isset($values['value']) || '&' !== $values['value'][0] || !self::preg_match('#^&(?P][[^ ]+)#u', $values['value'], $refMatches))) {
$mergeNode = true;
$allowOverwrite = true;
if (isset($values['value'][0]) && '*' === $values['value'][0]) {
$refName = substr(rtrim($values['value']), 1);
if (!\array_key_exists($refName, $this->refs)) {
if (false !== $pos = array_search($refName, $this->refsBeingParsed, true)) {
- throw new ParseException(sprintf('Circular reference [%s, %s] detected for reference "%s".', implode(', ', \array_slice($this->refsBeingParsed, $pos)), $refName, $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename);
+ throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$refName])), $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename);
}
throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
@@ -350,7 +299,7 @@ private function doParse($value, $flags)
$data += $parsed; // array union
}
}
- } elseif ('<<' !== $key && isset($values['value']) && self::preg_match('#^&(?P][[^ ]++) *+(?P.*)#u', $values['value'], $matches)) {
+ } elseif ('<<' !== $key && isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) {
$isRef = $matches['ref'];
$this->refsBeingParsed[] = $isRef;
$values['value'] = $matches['value'];
@@ -372,9 +321,11 @@ private function doParse($value, $flags)
$data[$key] = null;
}
} else {
- @trigger_error($this->getDeprecationMessage(sprintf('Duplicate key "%s" detected whilst parsing YAML. Silent handling of duplicate mapping keys in YAML is deprecated since Symfony 3.2 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0.', $key)), \E_USER_DEPRECATED);
+ throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine);
}
} else {
+ // remember the parsed line number here in case we need it to provide some contexts in error messages below
+ $realCurrentLineNbKey = $this->getRealCurrentLineNb();
$value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags);
if ('<<' === $key) {
$this->refs[$refMatches['ref']] = $value;
@@ -393,7 +344,7 @@ private function doParse($value, $flags)
$data[$key] = $value;
}
} else {
- @trigger_error($this->getDeprecationMessage(sprintf('Duplicate key "%s" detected whilst parsing YAML. Silent handling of duplicate mapping keys in YAML is deprecated since Symfony 3.2 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0.', $key)), \E_USER_DEPRECATED);
+ throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine);
}
}
} else {
@@ -403,13 +354,68 @@ private function doParse($value, $flags)
if ($allowOverwrite || !isset($data[$key])) {
$data[$key] = $value;
} else {
- @trigger_error($this->getDeprecationMessage(sprintf('Duplicate key "%s" detected whilst parsing YAML. Silent handling of duplicate mapping keys in YAML is deprecated since Symfony 3.2 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0.', $key)), \E_USER_DEPRECATED);
+ throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine);
}
}
if ($isRef) {
$this->refs[$isRef] = $data[$key];
array_pop($this->refsBeingParsed);
}
+ } elseif ('"' === $this->currentLine[0] || "'" === $this->currentLine[0]) {
+ if (null !== $context) {
+ throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+ }
+
+ try {
+ return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs);
+ } catch (ParseException $e) {
+ $e->setParsedLine($this->getRealCurrentLineNb() + 1);
+ $e->setSnippet($this->currentLine);
+
+ throw $e;
+ }
+ } elseif ('{' === $this->currentLine[0]) {
+ if (null !== $context) {
+ throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+ }
+
+ try {
+ $parsedMapping = Inline::parse($this->lexInlineMapping(), $flags, $this->refs);
+
+ while ($this->moveToNextLine()) {
+ if (!$this->isCurrentLineEmpty()) {
+ throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+ }
+ }
+
+ return $parsedMapping;
+ } catch (ParseException $e) {
+ $e->setParsedLine($this->getRealCurrentLineNb() + 1);
+ $e->setSnippet($this->currentLine);
+
+ throw $e;
+ }
+ } elseif ('[' === $this->currentLine[0]) {
+ if (null !== $context) {
+ throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+ }
+
+ try {
+ $parsedSequence = Inline::parse($this->lexInlineSequence(), $flags, $this->refs);
+
+ while ($this->moveToNextLine()) {
+ if (!$this->isCurrentLineEmpty()) {
+ throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
+ }
+ }
+
+ return $parsedSequence;
+ } catch (ParseException $e) {
+ $e->setParsedLine($this->getRealCurrentLineNb() + 1);
+ $e->setSnippet($this->currentLine);
+
+ throw $e;
+ }
} else {
// multiple documents are not supported
if ('---' === $this->currentLine) {
@@ -417,7 +423,7 @@ private function doParse($value, $flags)
}
if ($deprecatedUsage = (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1])) {
- @trigger_error($this->getDeprecationMessage('Starting an unquoted string with a question mark followed by a space is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0.'), \E_USER_DEPRECATED);
+ throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
}
// 1-liner optionally followed by newline(s)
@@ -448,6 +454,11 @@ private function doParse($value, $flags)
if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) {
throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
}
+
+ if (false !== strpos($line, ': ')) {
+ @trigger_error('Support for mapping keys in multi-line blocks is deprecated since Symfony 4.3 and will throw a ParseException in 5.0.', \E_USER_DEPRECATED);
+ }
+
if ('' === trim($line)) {
$value .= "\n";
} elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) {
@@ -500,7 +511,7 @@ private function doParse($value, $flags)
return empty($data) ? null : $data;
}
- private function parseBlock($offset, $yaml, $flags)
+ private function parseBlock(int $offset, string $yaml, int $flags)
{
$skippedLineNumbers = $this->skippedLineNumbers;
@@ -529,7 +540,7 @@ private function parseBlock($offset, $yaml, $flags)
*
* @return int The current line number
*/
- public function getRealCurrentLineNb()
+ public function getRealCurrentLineNb(): int
{
$realCurrentLineNumber = $this->currentLineNb + $this->offset;
@@ -549,7 +560,7 @@ public function getRealCurrentLineNb()
*
* @return int The current line indentation
*/
- private function getCurrentLineIndentation()
+ private function getCurrentLineIndentation(): int
{
return \strlen($this->currentLine) - \strlen(ltrim($this->currentLine, ' '));
}
@@ -557,14 +568,14 @@ private function getCurrentLineIndentation()
/**
* Returns the next embed block of YAML.
*
- * @param int $indentation The indent level at which the block is to be read, or null for default
- * @param bool $inSequence True if the enclosing data structure is a sequence
+ * @param int|null $indentation The indent level at which the block is to be read, or null for default
+ * @param bool $inSequence True if the enclosing data structure is a sequence
*
* @return string A YAML string
*
* @throws ParseException When indentation problem are detected
*/
- private function getNextEmbedBlock($indentation = null, $inSequence = false)
+ private function getNextEmbedBlock(int $indentation = null, bool $inSequence = false): string
{
$oldLineIndentation = $this->getCurrentLineIndentation();
@@ -605,8 +616,9 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false)
}
$data = [];
+
if ($this->getCurrentLineIndentation() >= $newIndent) {
- $data[] = substr($this->currentLine, $newIndent);
+ $data[] = substr($this->currentLine, $newIndent ?? 0);
} elseif ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) {
$data[] = $this->currentLine;
} else {
@@ -660,12 +672,15 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false)
return implode("\n", $data);
}
+ private function hasMoreLines(): bool
+ {
+ return (\count($this->lines) - 1) > $this->currentLineNb;
+ }
+
/**
* Moves the parser to the next line.
- *
- * @return bool
*/
- private function moveToNextLine()
+ private function moveToNextLine(): bool
{
if ($this->currentLineNb >= \count($this->lines) - 1) {
return false;
@@ -678,10 +693,8 @@ private function moveToNextLine()
/**
* Moves the parser to the previous line.
- *
- * @return bool
*/
- private function moveToPreviousLine()
+ private function moveToPreviousLine(): bool
{
if ($this->currentLineNb < 1) {
return false;
@@ -703,7 +716,7 @@ private function moveToPreviousLine()
*
* @throws ParseException When reference does not exist
*/
- private function parseValue($value, $flags, $context)
+ private function parseValue(string $value, int $flags, string $context)
{
if (0 === strpos($value, '*')) {
if (false !== $pos = strpos($value, '#')) {
@@ -714,7 +727,7 @@ private function parseValue($value, $flags, $context)
if (!\array_key_exists($value, $this->refs)) {
if (false !== $pos = array_search($value, $this->refsBeingParsed, true)) {
- throw new ParseException(sprintf('Circular reference [%s, %s] detected for reference "%s".', implode(', ', \array_slice($this->refsBeingParsed, $pos)), $value, $value), $this->currentLineNb + 1, $this->currentLine, $this->filename);
+ throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$value])), $value), $this->currentLineNb + 1, $this->currentLine, $this->filename);
}
throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename);
@@ -723,73 +736,81 @@ private function parseValue($value, $flags, $context)
return $this->refs[$value];
}
- if (self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) {
- $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';
+ if (\in_array($value[0], ['!', '|', '>'], true) && self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) {
+ $modifiers = $matches['modifiers'] ?? '';
$data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), abs((int) $modifiers));
- if ('' !== $matches['tag']) {
+ if ('' !== $matches['tag'] && '!' !== $matches['tag']) {
if ('!!binary' === $matches['tag']) {
return Inline::evaluateBinaryScalar($data);
- } elseif ('tagged' === $matches['tag']) {
- return new TaggedValue(substr($matches['tag'], 1), $data);
- } elseif ('!' !== $matches['tag']) {
- @trigger_error($this->getDeprecationMessage(sprintf('Using the custom tag "%s" for the value "%s" is deprecated since Symfony 3.3. It will be replaced by an instance of %s in 4.0.', $matches['tag'], $data, TaggedValue::class)), \E_USER_DEPRECATED);
}
+
+ return new TaggedValue(substr($matches['tag'], 1), $data);
}
return $data;
}
try {
- $quotation = '' !== $value && ('"' === $value[0] || "'" === $value[0]) ? $value[0] : null;
+ if ('' !== $value && '{' === $value[0]) {
+ $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value));
+
+ return Inline::parse($this->lexInlineMapping($cursor), $flags, $this->refs);
+ } elseif ('' !== $value && '[' === $value[0]) {
+ $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value));
- // do not take following lines into account when the current line is a quoted single line value
- if (null !== $quotation && self::preg_match('/^'.$quotation.'.*'.$quotation.'(\s*#.*)?$/', $value)) {
- return Inline::parse($value, $flags, $this->refs);
+ return Inline::parse($this->lexInlineSequence($cursor), $flags, $this->refs);
}
- $lines = [];
+ switch ($value[0] ?? '') {
+ case '"':
+ case "'":
+ $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value));
+ $parsedValue = Inline::parse($this->lexInlineQuotedString($cursor), $flags, $this->refs);
- while ($this->moveToNextLine()) {
- // unquoted strings end before the first unindented line
- if (null === $quotation && 0 === $this->getCurrentLineIndentation()) {
- $this->moveToPreviousLine();
+ if (isset($this->currentLine[$cursor]) && preg_replace('/\s*(#.*)?$/A', '', substr($this->currentLine, $cursor))) {
+ throw new ParseException(sprintf('Unexpected characters near "%s".', substr($this->currentLine, $cursor)));
+ }
- break;
- }
+ return $parsedValue;
+ default:
+ $lines = [];
- $lines[] = trim($this->currentLine);
+ while ($this->moveToNextLine()) {
+ // unquoted strings end before the first unindented line
+ if (0 === $this->getCurrentLineIndentation()) {
+ $this->moveToPreviousLine();
- // quoted string values end with a line that is terminated with the quotation character
- $escapedLine = str_replace(['\\\\', '\\"'], '', $this->currentLine);
- if ('' !== $escapedLine && substr($escapedLine, -1) === $quotation) {
- break;
- }
- }
+ break;
+ }
- for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) {
- if ('' === $lines[$i]) {
- $value .= "\n";
- $previousLineBlank = true;
- } elseif ($previousLineBlank) {
- $value .= $lines[$i];
- $previousLineBlank = false;
- } else {
- $value .= ' '.$lines[$i];
- $previousLineBlank = false;
- }
- }
+ $lines[] = trim($this->currentLine);
+ }
+
+ for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) {
+ if ('' === $lines[$i]) {
+ $value .= "\n";
+ $previousLineBlank = true;
+ } elseif ($previousLineBlank) {
+ $value .= $lines[$i];
+ $previousLineBlank = false;
+ } else {
+ $value .= ' '.$lines[$i];
+ $previousLineBlank = false;
+ }
+ }
- Inline::$parsedLineNumber = $this->getRealCurrentLineNb();
+ Inline::$parsedLineNumber = $this->getRealCurrentLineNb();
- $parsedValue = Inline::parse($value, $flags, $this->refs);
+ $parsedValue = Inline::parse($value, $flags, $this->refs);
- if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && false !== strpos($parsedValue, ': ')) {
- throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename);
- }
+ if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && false !== strpos($parsedValue, ': ')) {
+ throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename);
+ }
- return $parsedValue;
+ return $parsedValue;
+ }
} catch (ParseException $e) {
$e->setParsedLine($this->getRealCurrentLineNb() + 1);
$e->setSnippet($this->currentLine);
@@ -804,10 +825,8 @@ private function parseValue($value, $flags, $context)
* @param string $style The style indicator that was used to begin this block scalar (| or >)
* @param string $chomping The chomping indicator that was used to begin this block scalar (+ or -)
* @param int $indentation The indentation indicator that was used to begin this block scalar
- *
- * @return string The text value
*/
- private function parseBlockScalar($style, $chomping = '', $indentation = 0)
+ private function parseBlockScalar(string $style, string $chomping = '', int $indentation = 0): string
{
$notEOF = $this->moveToNextLine();
if (!$notEOF) {
@@ -828,8 +847,10 @@ private function parseBlockScalar($style, $chomping = '', $indentation = 0)
// determine indentation if not specified
if (0 === $indentation) {
- if (self::preg_match('/^ +/', $this->currentLine, $matches)) {
- $indentation = \strlen($matches[0]);
+ $currentLineLength = \strlen($this->currentLine);
+
+ for ($i = 0; $i < $currentLineLength && ' ' === $this->currentLine[$i]; ++$i) {
+ ++$indentation;
}
}
@@ -914,7 +935,7 @@ private function parseBlockScalar($style, $chomping = '', $indentation = 0)
*
* @return bool Returns true if the next line is indented, false otherwise
*/
- private function isNextLineIndented()
+ private function isNextLineIndented(): bool
{
$currentIndentation = $this->getCurrentLineIndentation();
$movements = 0;
@@ -945,7 +966,7 @@ private function isNextLineIndented()
*
* @return bool Returns true if the current line is empty or if it is a comment line, false otherwise
*/
- private function isCurrentLineEmpty()
+ private function isCurrentLineEmpty(): bool
{
return $this->isCurrentLineBlank() || $this->isCurrentLineComment();
}
@@ -955,7 +976,7 @@ private function isCurrentLineEmpty()
*
* @return bool Returns true if the current line is blank, false otherwise
*/
- private function isCurrentLineBlank()
+ private function isCurrentLineBlank(): bool
{
return '' == trim($this->currentLine, ' ');
}
@@ -965,15 +986,15 @@ private function isCurrentLineBlank()
*
* @return bool Returns true if the current line is a comment line, false otherwise
*/
- private function isCurrentLineComment()
+ private function isCurrentLineComment(): bool
{
- //checking explicitly the first char of the trim is faster than loops or strpos
+ // checking explicitly the first char of the trim is faster than loops or strpos
$ltrimmedLine = ltrim($this->currentLine, ' ');
return '' !== $ltrimmedLine && '#' === $ltrimmedLine[0];
}
- private function isCurrentLineLastLineInDocument()
+ private function isCurrentLineLastLineInDocument(): bool
{
return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1);
}
@@ -985,7 +1006,7 @@ private function isCurrentLineLastLineInDocument()
*
* @return string A cleaned up YAML string
*/
- private function cleanup($value)
+ private function cleanup(string $value): string
{
$value = str_replace(["\r\n", "\r"], "\n", $value);
@@ -1021,7 +1042,7 @@ private function cleanup($value)
*
* @return bool Returns true if the next line starts unindented collection, false otherwise
*/
- private function isNextLineUnIndentedCollection()
+ private function isNextLineUnIndentedCollection(): bool
{
$currentIndentation = $this->getCurrentLineIndentation();
$movements = 0;
@@ -1052,13 +1073,13 @@ private function isNextLineUnIndentedCollection()
*
* @return bool Returns true if the string is un-indented collection item, false otherwise
*/
- private function isStringUnIndentedCollectionItem()
+ private function isStringUnIndentedCollectionItem(): bool
{
return '-' === rtrim($this->currentLine) || 0 === strpos($this->currentLine, '- ');
}
/**
- * A local wrapper for `preg_match` which will throw a ParseException if there
+ * A local wrapper for "preg_match" which will throw a ParseException if there
* is an internal error in the PCRE engine.
*
* This avoids us needing to check for "false" every time PCRE is used
@@ -1070,7 +1091,7 @@ private function isStringUnIndentedCollectionItem()
*
* @internal
*/
- public static function preg_match($pattern, $subject, &$matches = null, $flags = 0, $offset = 0)
+ public static function preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int
{
if (false === $ret = preg_match($pattern, $subject, $matches, $flags, $offset)) {
switch (preg_last_error()) {
@@ -1102,10 +1123,10 @@ public static function preg_match($pattern, $subject, &$matches = null, $flags =
/**
* Trim the tag on top of the value.
*
- * Prevent values such as `!foo {quz: bar}` to be considered as
+ * Prevent values such as "!foo {quz: bar}" to be considered as
* a mapping block.
*/
- private function trimTag($value)
+ private function trimTag(string $value): string
{
if ('!' === $value[0]) {
return ltrim(substr($value, 1, strcspn($value, " \r\n", 1)), ' ');
@@ -1114,10 +1135,7 @@ private function trimTag($value)
return $value;
}
- /**
- * @return string|null
- */
- private function getLineTag($value, $flags, $nextLineCheck = true)
+ private function getLineTag(string $value, int $flags, bool $nextLineCheck = true): ?string
{
if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) {
return null;
@@ -1138,19 +1156,162 @@ private function getLineTag($value, $flags, $nextLineCheck = true)
return $tag;
}
- throw new ParseException(sprintf('Tags support is not enabled. You must use the flag `Yaml::PARSE_CUSTOM_TAGS` to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename);
+ throw new ParseException(sprintf('Tags support is not enabled. You must use the flag "Yaml::PARSE_CUSTOM_TAGS" to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename);
+ }
+
+ private function lexInlineQuotedString(int &$cursor = 0): string
+ {
+ $quotation = $this->currentLine[$cursor];
+ $value = $quotation;
+ ++$cursor;
+
+ $previousLineWasNewline = true;
+ $previousLineWasTerminatedWithBackslash = false;
+ $lineNumber = 0;
+
+ do {
+ if (++$lineNumber > 1) {
+ $cursor += strspn($this->currentLine, ' ', $cursor);
+ }
+
+ if ($this->isCurrentLineBlank()) {
+ $value .= "\n";
+ } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) {
+ $value .= ' ';
+ }
+
+ for (; \strlen($this->currentLine) > $cursor; ++$cursor) {
+ switch ($this->currentLine[$cursor]) {
+ case '\\':
+ if ("'" === $quotation) {
+ $value .= '\\';
+ } elseif (isset($this->currentLine[++$cursor])) {
+ $value .= '\\'.$this->currentLine[$cursor];
+ }
+
+ break;
+ case $quotation:
+ ++$cursor;
+
+ if ("'" === $quotation && isset($this->currentLine[$cursor]) && "'" === $this->currentLine[$cursor]) {
+ $value .= "''";
+ break;
+ }
+
+ return $value.$quotation;
+ default:
+ $value .= $this->currentLine[$cursor];
+ }
+ }
+
+ if ($this->isCurrentLineBlank()) {
+ $previousLineWasNewline = true;
+ $previousLineWasTerminatedWithBackslash = false;
+ } elseif ('\\' === $this->currentLine[-1]) {
+ $previousLineWasNewline = false;
+ $previousLineWasTerminatedWithBackslash = true;
+ } else {
+ $previousLineWasNewline = false;
+ $previousLineWasTerminatedWithBackslash = false;
+ }
+
+ if ($this->hasMoreLines()) {
+ $cursor = 0;
+ }
+ } while ($this->moveToNextLine());
+
+ throw new ParseException('Malformed inline YAML string.');
}
- private function getDeprecationMessage($message)
+ private function lexUnquotedString(int &$cursor): string
{
- $message = rtrim($message, '.');
+ $offset = $cursor;
+ $cursor += strcspn($this->currentLine, '[]{},: ', $cursor);
- if (null !== $this->filename) {
- $message .= ' in '.$this->filename;
+ if ($cursor === $offset) {
+ throw new ParseException('Malformed unquoted YAML string.');
}
- $message .= ' on line '.($this->getRealCurrentLineNb() + 1);
+ return substr($this->currentLine, $offset, $cursor - $offset);
+ }
+
+ private function lexInlineMapping(int &$cursor = 0): string
+ {
+ return $this->lexInlineStructure($cursor, '}');
+ }
+
+ private function lexInlineSequence(int &$cursor = 0): string
+ {
+ return $this->lexInlineStructure($cursor, ']');
+ }
+
+ private function lexInlineStructure(int &$cursor, string $closingTag): string
+ {
+ $value = $this->currentLine[$cursor];
+ ++$cursor;
+
+ do {
+ $this->consumeWhitespaces($cursor);
+
+ while (isset($this->currentLine[$cursor])) {
+ switch ($this->currentLine[$cursor]) {
+ case '"':
+ case "'":
+ $value .= $this->lexInlineQuotedString($cursor);
+ break;
+ case ':':
+ case ',':
+ $value .= $this->currentLine[$cursor];
+ ++$cursor;
+ break;
+ case '{':
+ $value .= $this->lexInlineMapping($cursor);
+ break;
+ case '[':
+ $value .= $this->lexInlineSequence($cursor);
+ break;
+ case $closingTag:
+ $value .= $this->currentLine[$cursor];
+ ++$cursor;
+
+ return $value;
+ case '#':
+ break 2;
+ default:
+ $value .= $this->lexUnquotedString($cursor);
+ }
+
+ if ($this->consumeWhitespaces($cursor)) {
+ $value .= ' ';
+ }
+ }
+
+ if ($this->hasMoreLines()) {
+ $cursor = 0;
+ }
+ } while ($this->moveToNextLine());
+
+ throw new ParseException('Malformed inline YAML string.');
+ }
+
+ private function consumeWhitespaces(int &$cursor): bool
+ {
+ $whitespacesConsumed = 0;
+
+ do {
+ $whitespaceOnlyTokenLength = strspn($this->currentLine, ' ', $cursor);
+ $whitespacesConsumed += $whitespaceOnlyTokenLength;
+ $cursor += $whitespaceOnlyTokenLength;
+
+ if (isset($this->currentLine[$cursor])) {
+ return 0 < $whitespacesConsumed;
+ }
+
+ if ($this->hasMoreLines()) {
+ $cursor = 0;
+ }
+ } while ($this->moveToNextLine());
- return $message.'.';
+ return 0 < $whitespacesConsumed;
}
}
diff --git a/vendor/symfony/yaml/README.md b/vendor/symfony/yaml/README.md
index b914e783..ac25024b 100644
--- a/vendor/symfony/yaml/README.md
+++ b/vendor/symfony/yaml/README.md
@@ -6,8 +6,8 @@ The Yaml component loads and dumps YAML files.
Resources
---------
- * [Documentation](https://symfony.com/doc/current/components/yaml.html)
- * [Contributing](https://symfony.com/doc/current/contributing/index.html)
- * [Report issues](https://github.com/symfony/symfony/issues) and
- [send Pull Requests](https://github.com/symfony/symfony/pulls)
- in the [main Symfony repository](https://github.com/symfony/symfony)
+ * [Documentation](https://symfony.com/doc/current/components/yaml.html)
+ * [Contributing](https://symfony.com/doc/current/contributing/index.html)
+ * [Report issues](https://github.com/symfony/symfony/issues) and
+ [send Pull Requests](https://github.com/symfony/symfony/pulls)
+ in the [main Symfony repository](https://github.com/symfony/symfony)
diff --git a/vendor/symfony/yaml/Tag/TaggedValue.php b/vendor/symfony/yaml/Tag/TaggedValue.php
index 000c1d99..4ea34061 100644
--- a/vendor/symfony/yaml/Tag/TaggedValue.php
+++ b/vendor/symfony/yaml/Tag/TaggedValue.php
@@ -20,27 +20,17 @@ final class TaggedValue
private $tag;
private $value;
- /**
- * @param string $tag
- * @param mixed $value
- */
- public function __construct($tag, $value)
+ public function __construct(string $tag, $value)
{
$this->tag = $tag;
$this->value = $value;
}
- /**
- * @return string
- */
- public function getTag()
+ public function getTag(): string
{
return $this->tag;
}
- /**
- * @return mixed
- */
public function getValue()
{
return $this->value;
diff --git a/vendor/symfony/yaml/Tests/Command/LintCommandTest.php b/vendor/symfony/yaml/Tests/Command/LintCommandTest.php
deleted file mode 100644
index 98c63b62..00000000
--- a/vendor/symfony/yaml/Tests/Command/LintCommandTest.php
+++ /dev/null
@@ -1,137 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Yaml\Tests\Command;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Console\Application;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Tester\CommandTester;
-use Symfony\Component\Yaml\Command\LintCommand;
-
-/**
- * Tests the YamlLintCommand.
- *
- * @author Robin Chalas
- */
-class LintCommandTest extends TestCase
-{
- private $files;
-
- public function testLintCorrectFile()
- {
- $tester = $this->createCommandTester();
- $filename = $this->createFile('foo: bar');
-
- $ret = $tester->execute(['filename' => $filename], ['verbosity' => OutputInterface::VERBOSITY_VERBOSE, 'decorated' => false]);
-
- $this->assertEquals(0, $ret, 'Returns 0 in case of success');
- $this->assertMatchesRegularExpression('/^\/\/ OK in /', trim($tester->getDisplay()));
- }
-
- public function testLintIncorrectFile()
- {
- $incorrectContent = '
-foo:
-bar';
- $tester = $this->createCommandTester();
- $filename = $this->createFile($incorrectContent);
-
- $ret = $tester->execute(['filename' => $filename], ['decorated' => false]);
-
- $this->assertEquals(1, $ret, 'Returns 1 in case of error');
- $this->assertStringContainsString('Unable to parse at line 3 (near "bar").', trim($tester->getDisplay()));
- }
-
- public function testConstantAsKey()
- {
- $yaml = <<createCommandTester()->execute(['filename' => $this->createFile($yaml)], ['verbosity' => OutputInterface::VERBOSITY_VERBOSE, 'decorated' => false]);
- $this->assertSame(0, $ret, 'lint:yaml exits with code 0 in case of success');
- }
-
- public function testCustomTags()
- {
- $yaml = <<createCommandTester()->execute(['filename' => $this->createFile($yaml), '--parse-tags' => true], ['verbosity' => OutputInterface::VERBOSITY_VERBOSE, 'decorated' => false]);
- $this->assertSame(0, $ret, 'lint:yaml exits with code 0 in case of success');
- }
-
- public function testCustomTagsError()
- {
- $yaml = <<createCommandTester()->execute(['filename' => $this->createFile($yaml)], ['verbosity' => OutputInterface::VERBOSITY_VERBOSE, 'decorated' => false]);
- $this->assertSame(1, $ret, 'lint:yaml exits with code 1 in case of error');
- }
-
- public function testLintFileNotReadable()
- {
- $this->expectException('RuntimeException');
- $tester = $this->createCommandTester();
- $filename = $this->createFile('');
- unlink($filename);
-
- $tester->execute(['filename' => $filename], ['decorated' => false]);
- }
-
- /**
- * @return string Path to the new file
- */
- private function createFile($content)
- {
- $filename = tempnam(sys_get_temp_dir().'/framework-yml-lint-test', 'sf-');
- file_put_contents($filename, $content);
-
- $this->files[] = $filename;
-
- return $filename;
- }
-
- /**
- * @return CommandTester
- */
- protected function createCommandTester()
- {
- $application = new Application();
- $application->add(new LintCommand());
- $command = $application->find('lint:yaml');
-
- return new CommandTester($command);
- }
-
- protected function setUp()
- {
- $this->files = [];
- @mkdir(sys_get_temp_dir().'/framework-yml-lint-test');
- }
-
- protected function tearDown()
- {
- foreach ($this->files as $file) {
- if (file_exists($file)) {
- @unlink($file);
- }
- }
-
- @rmdir(sys_get_temp_dir().'/framework-yml-lint-test');
- }
-}
-
-class Foo
-{
- const TEST = 'foo';
-}
diff --git a/vendor/symfony/yaml/Tests/DumperTest.php b/vendor/symfony/yaml/Tests/DumperTest.php
deleted file mode 100644
index e4dc49f3..00000000
--- a/vendor/symfony/yaml/Tests/DumperTest.php
+++ /dev/null
@@ -1,655 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Yaml\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Yaml\Dumper;
-use Symfony\Component\Yaml\Parser;
-use Symfony\Component\Yaml\Tag\TaggedValue;
-use Symfony\Component\Yaml\Yaml;
-
-class DumperTest extends TestCase
-{
- protected $parser;
- protected $dumper;
- protected $path;
-
- protected $array = [
- '' => 'bar',
- 'foo' => '#bar',
- 'foo\'bar' => [],
- 'bar' => [1, 'foo'],
- 'foobar' => [
- 'foo' => 'bar',
- 'bar' => [1, 'foo'],
- 'foobar' => [
- 'foo' => 'bar',
- 'bar' => [1, 'foo'],
- ],
- ],
- ];
-
- protected function setUp()
- {
- $this->parser = new Parser();
- $this->dumper = new Dumper();
- $this->path = __DIR__.'/Fixtures';
- }
-
- protected function tearDown()
- {
- $this->parser = null;
- $this->dumper = null;
- $this->path = null;
- $this->array = null;
- }
-
- public function testIndentationInConstructor()
- {
- $dumper = new Dumper(7);
- $expected = <<<'EOF'
-'': bar
-foo: '#bar'
-'foo''bar': { }
-bar:
- - 1
- - foo
-foobar:
- foo: bar
- bar:
- - 1
- - foo
- foobar:
- foo: bar
- bar:
- - 1
- - foo
-
-EOF;
- $this->assertEquals($expected, $dumper->dump($this->array, 4, 0));
- }
-
- /**
- * @group legacy
- */
- public function testSetIndentation()
- {
- $this->dumper->setIndentation(7);
-
- $expected = <<<'EOF'
-'': bar
-foo: '#bar'
-'foo''bar': { }
-bar:
- - 1
- - foo
-foobar:
- foo: bar
- bar:
- - 1
- - foo
- foobar:
- foo: bar
- bar:
- - 1
- - foo
-
-EOF;
- $this->assertEquals($expected, $this->dumper->dump($this->array, 4, 0));
- }
-
- public function testSpecifications()
- {
- $files = $this->parser->parse(file_get_contents($this->path.'/index.yml'));
- foreach ($files as $file) {
- $yamls = file_get_contents($this->path.'/'.$file.'.yml');
-
- // split YAMLs documents
- foreach (preg_split('/^---( %YAML\:1\.0)?/m', $yamls) as $yaml) {
- if (!$yaml) {
- continue;
- }
-
- $test = $this->parser->parse($yaml);
- if (isset($test['dump_skip']) && $test['dump_skip']) {
- continue;
- } elseif (isset($test['todo']) && $test['todo']) {
- // TODO
- } else {
- eval('$expected = '.trim($test['php']).';');
- $this->assertSame($expected, $this->parser->parse($this->dumper->dump($expected, 10)), $test['test']);
- }
- }
- }
- }
-
- public function testInlineLevel()
- {
- $expected = <<<'EOF'
-{ '': bar, foo: '#bar', 'foo''bar': { }, bar: [1, foo], foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } } }
-EOF;
- $this->assertEquals($expected, $this->dumper->dump($this->array, -10), '->dump() takes an inline level argument');
- $this->assertEquals($expected, $this->dumper->dump($this->array, 0), '->dump() takes an inline level argument');
-
- $expected = <<<'EOF'
-'': bar
-foo: '#bar'
-'foo''bar': { }
-bar: [1, foo]
-foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } }
-
-EOF;
- $this->assertEquals($expected, $this->dumper->dump($this->array, 1), '->dump() takes an inline level argument');
-
- $expected = <<<'EOF'
-'': bar
-foo: '#bar'
-'foo''bar': { }
-bar:
- - 1
- - foo
-foobar:
- foo: bar
- bar: [1, foo]
- foobar: { foo: bar, bar: [1, foo] }
-
-EOF;
- $this->assertEquals($expected, $this->dumper->dump($this->array, 2), '->dump() takes an inline level argument');
-
- $expected = <<<'EOF'
-'': bar
-foo: '#bar'
-'foo''bar': { }
-bar:
- - 1
- - foo
-foobar:
- foo: bar
- bar:
- - 1
- - foo
- foobar:
- foo: bar
- bar: [1, foo]
-
-EOF;
- $this->assertEquals($expected, $this->dumper->dump($this->array, 3), '->dump() takes an inline level argument');
-
- $expected = <<<'EOF'
-'': bar
-foo: '#bar'
-'foo''bar': { }
-bar:
- - 1
- - foo
-foobar:
- foo: bar
- bar:
- - 1
- - foo
- foobar:
- foo: bar
- bar:
- - 1
- - foo
-
-EOF;
- $this->assertEquals($expected, $this->dumper->dump($this->array, 4), '->dump() takes an inline level argument');
- $this->assertEquals($expected, $this->dumper->dump($this->array, 10), '->dump() takes an inline level argument');
- }
-
- public function testObjectSupportEnabled()
- {
- $dump = $this->dumper->dump(['foo' => new A(), 'bar' => 1], 0, 0, Yaml::DUMP_OBJECT);
-
- $this->assertEquals('{ foo: !php/object \'O:30:"Symfony\Component\Yaml\Tests\A":1:{s:1:"a";s:3:"foo";}\', bar: 1 }', $dump, '->dump() is able to dump objects');
- }
-
- /**
- * @group legacy
- */
- public function testObjectSupportEnabledPassingTrue()
- {
- $dump = $this->dumper->dump(['foo' => new A(), 'bar' => 1], 0, 0, false, true);
-
- $this->assertEquals('{ foo: !php/object \'O:30:"Symfony\Component\Yaml\Tests\A":1:{s:1:"a";s:3:"foo";}\', bar: 1 }', $dump, '->dump() is able to dump objects');
- }
-
- public function testObjectSupportDisabledButNoExceptions()
- {
- $dump = $this->dumper->dump(['foo' => new A(), 'bar' => 1]);
-
- $this->assertEquals('{ foo: null, bar: 1 }', $dump, '->dump() does not dump objects when disabled');
- }
-
- public function testObjectSupportDisabledWithExceptions()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\DumpException');
- $this->dumper->dump(['foo' => new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE);
- }
-
- /**
- * @group legacy
- */
- public function testObjectSupportDisabledWithExceptionsPassingTrue()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\DumpException');
- $this->dumper->dump(['foo' => new A(), 'bar' => 1], 0, 0, true);
- }
-
- public function testEmptyArray()
- {
- $dump = $this->dumper->dump([]);
- $this->assertEquals('{ }', $dump);
-
- $dump = $this->dumper->dump([], 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE);
- $this->assertEquals('[]', $dump);
-
- $dump = $this->dumper->dump([], 9, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE);
- $this->assertEquals('[]', $dump);
-
- $dump = $this->dumper->dump(new \ArrayObject(), 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE | Yaml::DUMP_OBJECT_AS_MAP);
- $this->assertEquals('{ }', $dump);
-
- $dump = $this->dumper->dump(new \stdClass(), 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE | Yaml::DUMP_OBJECT_AS_MAP);
- $this->assertEquals('{ }', $dump);
- }
-
- /**
- * @dataProvider getEscapeSequences
- */
- public function testEscapedEscapeSequencesInQuotedScalar($input, $expected)
- {
- $this->assertEquals($expected, $this->dumper->dump($input));
- }
-
- public function getEscapeSequences()
- {
- return [
- 'empty string' => ['', "''"],
- 'null' => ["\x0", '"\\0"'],
- 'bell' => ["\x7", '"\\a"'],
- 'backspace' => ["\x8", '"\\b"'],
- 'horizontal-tab' => ["\t", '"\\t"'],
- 'line-feed' => ["\n", '"\\n"'],
- 'vertical-tab' => ["\v", '"\\v"'],
- 'form-feed' => ["\xC", '"\\f"'],
- 'carriage-return' => ["\r", '"\\r"'],
- 'escape' => ["\x1B", '"\\e"'],
- 'space' => [' ', "' '"],
- 'double-quote' => ['"', "'\"'"],
- 'slash' => ['/', '/'],
- 'backslash' => ['\\', '\\'],
- 'del' => ["\x7f", '"\x7f"'],
- 'next-line' => ["\xC2\x85", '"\\N"'],
- 'non-breaking-space' => ["\xc2\xa0", '"\\_"'],
- 'line-separator' => ["\xE2\x80\xA8", '"\\L"'],
- 'paragraph-separator' => ["\xE2\x80\xA9", '"\\P"'],
- 'colon' => [':', "':'"],
- ];
- }
-
- public function testBinaryDataIsDumpedBase64Encoded()
- {
- $binaryData = file_get_contents(__DIR__.'/Fixtures/arrow.gif');
- $expected = '{ data: !!binary '.base64_encode($binaryData).' }';
-
- $this->assertSame($expected, $this->dumper->dump(['data' => $binaryData]));
- }
-
- public function testNonUtf8DataIsDumpedBase64Encoded()
- {
- // "für" (ISO-8859-1 encoded)
- $this->assertSame('!!binary ZsM/cg==', $this->dumper->dump("f\xc3\x3fr"));
- }
-
- /**
- * @dataProvider objectAsMapProvider
- */
- public function testDumpObjectAsMap($object, $expected)
- {
- $yaml = $this->dumper->dump($object, 0, 0, Yaml::DUMP_OBJECT_AS_MAP);
-
- $this->assertEquals($expected, Yaml::parse($yaml, Yaml::PARSE_OBJECT_FOR_MAP));
- }
-
- public function objectAsMapProvider()
- {
- $tests = [];
-
- $bar = new \stdClass();
- $bar->class = 'classBar';
- $bar->args = ['bar'];
- $zar = new \stdClass();
- $foo = new \stdClass();
- $foo->bar = $bar;
- $foo->zar = $zar;
- $object = new \stdClass();
- $object->foo = $foo;
- $tests['stdClass'] = [$object, $object];
-
- $arrayObject = new \ArrayObject();
- $arrayObject['foo'] = 'bar';
- $arrayObject['baz'] = 'foobar';
- $parsedArrayObject = new \stdClass();
- $parsedArrayObject->foo = 'bar';
- $parsedArrayObject->baz = 'foobar';
- $tests['ArrayObject'] = [$arrayObject, $parsedArrayObject];
-
- $a = new A();
- $tests['arbitrary-object'] = [$a, null];
-
- return $tests;
- }
-
- public function testDumpingArrayObjectInstancesRespectsInlineLevel()
- {
- $deep = new \ArrayObject(['deep1' => 'd', 'deep2' => 'e']);
- $inner = new \ArrayObject(['inner1' => 'b', 'inner2' => 'c', 'inner3' => $deep]);
- $outer = new \ArrayObject(['outer1' => 'a', 'outer2' => $inner]);
-
- $yaml = $this->dumper->dump($outer, 2, 0, Yaml::DUMP_OBJECT_AS_MAP);
-
- $expected = <<assertSame($expected, $yaml);
- }
-
- public function testDumpingArrayObjectInstancesWithNumericKeysInlined()
- {
- $deep = new \ArrayObject(['d', 'e']);
- $inner = new \ArrayObject(['b', 'c', $deep]);
- $outer = new \ArrayObject(['a', $inner]);
-
- $yaml = $this->dumper->dump($outer, 0, 0, Yaml::DUMP_OBJECT_AS_MAP);
- $expected = <<assertSame($expected, $yaml);
- }
-
- public function testDumpingArrayObjectInstancesWithNumericKeysRespectsInlineLevel()
- {
- $deep = new \ArrayObject(['d', 'e']);
- $inner = new \ArrayObject(['b', 'c', $deep]);
- $outer = new \ArrayObject(['a', $inner]);
- $yaml = $this->dumper->dump($outer, 2, 0, Yaml::DUMP_OBJECT_AS_MAP);
- $expected = <<assertEquals($expected, $yaml);
- }
-
- public function testDumpEmptyArrayObjectInstanceAsMap()
- {
- $this->assertSame('{ }', $this->dumper->dump(new \ArrayObject(), 2, 0, Yaml::DUMP_OBJECT_AS_MAP));
- }
-
- public function testDumpEmptyStdClassInstanceAsMap()
- {
- $this->assertSame('{ }', $this->dumper->dump(new \stdClass(), 2, 0, Yaml::DUMP_OBJECT_AS_MAP));
- }
-
- public function testDumpingStdClassInstancesRespectsInlineLevel()
- {
- $deep = new \stdClass();
- $deep->deep1 = 'd';
- $deep->deep2 = 'e';
-
- $inner = new \stdClass();
- $inner->inner1 = 'b';
- $inner->inner2 = 'c';
- $inner->inner3 = $deep;
-
- $outer = new \stdClass();
- $outer->outer1 = 'a';
- $outer->outer2 = $inner;
-
- $yaml = $this->dumper->dump($outer, 2, 0, Yaml::DUMP_OBJECT_AS_MAP);
-
- $expected = <<assertSame($expected, $yaml);
- }
-
- public function testDumpingTaggedValueSequenceRespectsInlineLevel()
- {
- $data = [
- new TaggedValue('user', [
- 'username' => 'jane',
- ]),
- new TaggedValue('user', [
- 'username' => 'john',
- ]),
- ];
-
- $yaml = $this->dumper->dump($data, 2);
-
- $expected = <<assertSame($expected, $yaml);
- }
-
- public function testDumpingTaggedValueSequenceWithInlinedTagValues()
- {
- $data = [
- new TaggedValue('user', [
- 'username' => 'jane',
- ]),
- new TaggedValue('user', [
- 'username' => 'john',
- ]),
- ];
-
- $yaml = $this->dumper->dump($data, 1);
-
- $expected = <<assertSame($expected, $yaml);
- }
-
- public function testDumpingTaggedValueMapRespectsInlineLevel()
- {
- $data = [
- 'user1' => new TaggedValue('user', [
- 'username' => 'jane',
- ]),
- 'user2' => new TaggedValue('user', [
- 'username' => 'john',
- ]),
- ];
-
- $yaml = $this->dumper->dump($data, 2);
-
- $expected = <<assertSame($expected, $yaml);
- }
-
- public function testDumpingTaggedValueMapWithInlinedTagValues()
- {
- $data = [
- 'user1' => new TaggedValue('user', [
- 'username' => 'jane',
- ]),
- 'user2' => new TaggedValue('user', [
- 'username' => 'john',
- ]),
- ];
-
- $yaml = $this->dumper->dump($data, 1);
-
- $expected = <<assertSame($expected, $yaml);
- }
-
- public function testDumpingNotInlinedScalarTaggedValue()
- {
- $data = [
- 'user1' => new TaggedValue('user', 'jane'),
- 'user2' => new TaggedValue('user', 'john'),
- ];
- $expected = <<assertSame($expected, $this->dumper->dump($data, 2));
- }
-
- public function testDumpingNotInlinedNullTaggedValue()
- {
- $data = [
- 'foo' => new TaggedValue('bar', null),
- ];
- $expected = <<assertSame($expected, $this->dumper->dump($data, 2));
- }
-
- public function testDumpingMultiLineStringAsScalarBlockTaggedValue()
- {
- $data = [
- 'foo' => new TaggedValue('bar', "foo\nline with trailing spaces:\n \nbar\ninteger like line:\n123456789\nempty line:\n\nbaz"),
- ];
- $expected = <<assertSame($expected, $this->dumper->dump($data, 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
- }
-
- public function testDumpingInlinedMultiLineIfRnBreakLineInTaggedValue()
- {
- $data = [
- 'data' => [
- 'foo' => new TaggedValue('bar', "foo\r\nline with trailing spaces:\n \nbar\ninteger like line:\n123456789\nempty line:\n\nbaz"),
- ],
- ];
-
- $this->assertSame(file_get_contents(__DIR__.'/Fixtures/multiple_lines_as_literal_block_for_tagged_values.yml'), $this->dumper->dump($data, 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
- }
-
- public function testDumpMultiLineStringAsScalarBlock()
- {
- $data = [
- 'data' => [
- 'single_line' => 'foo bar baz',
- 'multi_line' => "foo\nline with trailing spaces:\n \nbar\ninteger like line:\n123456789\nempty line:\n\nbaz",
- 'multi_line_with_carriage_return' => "foo\nbar\r\nbaz",
- 'nested_inlined_multi_line_string' => [
- 'inlined_multi_line' => "foo\nbar\r\nempty line:\n\nbaz",
- ],
- ],
- ];
-
- $this->assertSame(file_get_contents(__DIR__.'/Fixtures/multiple_lines_as_literal_block.yml'), $this->dumper->dump($data, 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
- }
-
- public function testDumpMultiLineStringAsScalarBlockWhenFirstLineHasLeadingSpace()
- {
- $data = [
- 'data' => [
- 'multi_line' => " the first line has leading spaces\nThe second line does not.",
- ],
- ];
-
- $this->assertSame(file_get_contents(__DIR__.'/Fixtures/multiple_lines_as_literal_block_leading_space_in_first_line.yml'), $this->dumper->dump($data, 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
- }
-
- public function testCarriageReturnFollowedByNewlineIsMaintainedWhenDumpingAsMultiLineLiteralBlock()
- {
- $this->assertSame("- \"a\\r\\nb\\nc\"\n", $this->dumper->dump(["a\r\nb\nc"], 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
- }
-
- public function testCarriageReturnNotFollowedByNewlineIsPreservedWhenDumpingAsMultiLineLiteralBlock()
- {
- $expected = <<<'YAML'
-parent:
- foo: "bar\n\rbaz: qux"
-
-YAML;
-
- $this->assertSame($expected, $this->dumper->dump([
- 'parent' => [
- 'foo' => "bar\n\rbaz: qux",
- ],
- ], 4, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
- }
-
- public function testZeroIndentationThrowsException()
- {
- $this->expectException('InvalidArgumentException');
- $this->expectExceptionMessage('The indentation must be greater than zero');
- new Dumper(0);
- }
-
- public function testNegativeIndentationThrowsException()
- {
- $this->expectException('InvalidArgumentException');
- $this->expectExceptionMessage('The indentation must be greater than zero');
- new Dumper(-4);
- }
-}
-
-class A
-{
- public $a = 'foo';
-}
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsAnchorAlias.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsAnchorAlias.yml
deleted file mode 100644
index 81b4129a..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsAnchorAlias.yml
+++ /dev/null
@@ -1,31 +0,0 @@
---- %YAML:1.0
-test: Simple Alias Example
-brief: >
- If you need to refer to the same item of data twice,
- you can give that item an alias. The alias is a plain
- string, starting with an ampersand. The item may then
- be referred to by the alias throughout your document
- by using an asterisk before the name of the alias.
- This is called an anchor.
-yaml: |
- - &showell Steve
- - Clark
- - Brian
- - Oren
- - *showell
-php: |
- ['Steve', 'Clark', 'Brian', 'Oren', 'Steve']
-
----
-test: Alias of a Mapping
-brief: >
- An alias can be used on any item of data, including
- sequences, mappings, and other complex data types.
-yaml: |
- - &hello
- Meat: pork
- Starch: potato
- - banana
- - *hello
-php: |
- [['Meat'=>'pork', 'Starch'=>'potato'], 'banana', ['Meat'=>'pork', 'Starch'=>'potato']]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsBasicTests.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsBasicTests.yml
deleted file mode 100644
index 1a08d8ea..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsBasicTests.yml
+++ /dev/null
@@ -1,202 +0,0 @@
---- %YAML:1.0
-test: Simple Sequence
-brief: |
- You can specify a list in YAML by placing each
- member of the list on a new line with an opening
- dash. These lists are called sequences.
-yaml: |
- - apple
- - banana
- - carrot
-php: |
- ['apple', 'banana', 'carrot']
----
-test: Sequence With Item Being Null In The Middle
-brief: |
- You can specify a list in YAML by placing each
- member of the list on a new line with an opening
- dash. These lists are called sequences.
-yaml: |
- - apple
- -
- - carrot
-php: |
- ['apple', null, 'carrot']
----
-test: Sequence With Last Item Being Null
-brief: |
- You can specify a list in YAML by placing each
- member of the list on a new line with an opening
- dash. These lists are called sequences.
-yaml: |
- - apple
- - banana
- -
-php: |
- ['apple', 'banana', null]
----
-test: Nested Sequences
-brief: |
- You can include a sequence within another
- sequence by giving the sequence an empty
- dash, followed by an indented list.
-yaml: |
- -
- - foo
- - bar
- - baz
-php: |
- [['foo', 'bar', 'baz']]
----
-test: Mixed Sequences
-brief: |
- Sequences can contain any YAML data,
- including strings and other sequences.
-yaml: |
- - apple
- -
- - foo
- - bar
- - x123
- - banana
- - carrot
-php: |
- ['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot']
----
-test: Deeply Nested Sequences
-brief: |
- Sequences can be nested even deeper, with each
- level of indentation representing a level of
- depth.
-yaml: |
- -
- -
- - uno
- - dos
-php: |
- [[['uno', 'dos']]]
----
-test: Simple Mapping
-brief: |
- You can add a keyed list (also known as a dictionary or
- hash) to your document by placing each member of the
- list on a new line, with a colon separating the key
- from its value. In YAML, this type of list is called
- a mapping.
-yaml: |
- foo: whatever
- bar: stuff
-php: |
- ['foo' => 'whatever', 'bar' => 'stuff']
----
-test: Sequence in a Mapping
-brief: |
- A value in a mapping can be a sequence.
-yaml: |
- foo: whatever
- bar:
- - uno
- - dos
-php: |
- ['foo' => 'whatever', 'bar' => ['uno', 'dos']]
----
-test: Nested Mappings
-brief: |
- A value in a mapping can be another mapping.
-yaml: |
- foo: whatever
- bar:
- fruit: apple
- name: steve
- sport: baseball
-php: |
- [
- 'foo' => 'whatever',
- 'bar' => [
- 'fruit' => 'apple',
- 'name' => 'steve',
- 'sport' => 'baseball'
- ]
- ]
----
-test: Mixed Mapping
-brief: |
- A mapping can contain any assortment
- of mappings and sequences as values.
-yaml: |
- foo: whatever
- bar:
- -
- fruit: apple
- name: steve
- sport: baseball
- - more
- -
- python: rocks
- perl: papers
- ruby: scissorses
-php: |
- [
- 'foo' => 'whatever',
- 'bar' => [
- [
- 'fruit' => 'apple',
- 'name' => 'steve',
- 'sport' => 'baseball'
- ],
- 'more',
- [
- 'python' => 'rocks',
- 'perl' => 'papers',
- 'ruby' => 'scissorses'
- ]
- ]
- ]
----
-test: Mapping-in-Sequence Shortcut
-todo: true
-brief: |
- If you are adding a mapping to a sequence, you
- can place the mapping on the same line as the
- dash as a shortcut.
-yaml: |
- - work on YAML.py:
- - work on Store
-php: |
- [['work on YAML.py' => ['work on Store']]]
----
-test: Sequence-in-Mapping Shortcut
-todo: true
-brief: |
- The dash in a sequence counts as indentation, so
- you can add a sequence inside of a mapping without
- needing spaces as indentation.
-yaml: |
- allow:
- - 'localhost'
- - '%.sourceforge.net'
- - '%.freepan.org'
-php: |
- ['allow' => ['localhost', '%.sourceforge.net', '%.freepan.org']]
----
-todo: true
-test: Merge key
-brief: |
- A merge key ('<<') can be used in a mapping to insert other mappings. If
- the value associated with the merge key is a mapping, each of its key/value
- pairs is inserted into the current mapping.
-yaml: |
- mapping:
- name: Joe
- job: Accountant
- <<:
- age: 38
-php: |
- [
- 'mapping' =>
- [
- 'name' => 'Joe',
- 'job' => 'Accountant',
- 'age' => 38
- ]
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsBlockMapping.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsBlockMapping.yml
deleted file mode 100644
index 1f3a2e54..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsBlockMapping.yml
+++ /dev/null
@@ -1,51 +0,0 @@
----
-test: One Element Mapping
-brief: |
- A mapping with one key/value pair
-yaml: |
- foo: bar
-php: |
- ['foo' => 'bar']
----
-test: Multi Element Mapping
-brief: |
- More than one key/value pair
-yaml: |
- red: baron
- white: walls
- blue: berries
-php: |
- [
- 'red' => 'baron',
- 'white' => 'walls',
- 'blue' => 'berries',
- ]
----
-test: Values aligned
-brief: |
- Often times human editors of documents will align the values even
- though YAML emitters generally don't.
-yaml: |
- red: baron
- white: walls
- blue: berries
-php: |
- [
- 'red' => 'baron',
- 'white' => 'walls',
- 'blue' => 'berries',
- ]
----
-test: Colons aligned
-brief: |
- Spaces can come before the ': ' key/value separator.
-yaml: |
- red : baron
- white : walls
- blue : berries
-php: |
- [
- 'red' => 'baron',
- 'white' => 'walls',
- 'blue' => 'berries',
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsDocumentSeparator.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsDocumentSeparator.yml
deleted file mode 100644
index 67cb47ad..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsDocumentSeparator.yml
+++ /dev/null
@@ -1,85 +0,0 @@
---- %YAML:1.0
-test: Trailing Document Separator
-todo: true
-brief: >
- You can separate YAML documents
- with a string of three dashes.
-yaml: |
- - foo: 1
- bar: 2
- ---
- more: stuff
-python: |
- [
- [ { 'foo': 1, 'bar': 2 } ],
- { 'more': 'stuff' }
- ]
-ruby: |
- [ { 'foo' => 1, 'bar' => 2 } ]
-
----
-test: Leading Document Separator
-todo: true
-brief: >
- You can explicitly give an opening
- document separator to your YAML stream.
-yaml: |
- ---
- - foo: 1
- bar: 2
- ---
- more: stuff
-python: |
- [
- [ {'foo': 1, 'bar': 2}],
- {'more': 'stuff'}
- ]
-ruby: |
- [ { 'foo' => 1, 'bar' => 2 } ]
-
----
-test: YAML Header
-todo: true
-brief: >
- The opening separator can contain directives
- to the YAML parser, such as the version
- number.
-yaml: |
- --- %YAML:1.0
- foo: 1
- bar: 2
-php: |
- ['foo' => 1, 'bar' => 2]
-documents: 1
-
----
-test: Red Herring Document Separator
-brief: >
- Separators included in blocks or strings
- are treated as blocks or strings, as the
- document separator should have no indentation
- preceding it.
-yaml: |
- foo: |
- ---
-php: |
- ['foo' => "---\n"]
-
----
-test: Multiple Document Separators in Block
-brief: >
- This technique allows you to embed other YAML
- documents within literal blocks.
-yaml: |
- foo: |
- ---
- foo: bar
- ---
- yo: baz
- bar: |
- fooness
-php: |
- [
- 'foo' => "---\nfoo: bar\n---\nyo: baz\n",
- 'bar' => "fooness\n"
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsErrorTests.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsErrorTests.yml
deleted file mode 100644
index e8697f93..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsErrorTests.yml
+++ /dev/null
@@ -1,25 +0,0 @@
----
-test: Missing value for hash item
-todo: true
-brief: |
- Third item in this hash doesn't have a value
-yaml: |
- okay: value
- also okay: ~
- causes error because no value specified
- last key: value okay here too
-python-error: causes error because no value specified
-
----
-test: Not indenting enough
-brief: |
- There was a bug in PyYaml where it was off by one
- in the indentation check. It was allowing the YAML
- below.
-# This is actually valid YAML now. Someone should tell showell.
-yaml: |
- foo:
- firstline: 1
- secondline: 2
-php: |
- ['foo' => null, 'firstline' => 1, 'secondline' => 2]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsFlowCollections.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsFlowCollections.yml
deleted file mode 100644
index cc562cd9..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsFlowCollections.yml
+++ /dev/null
@@ -1,60 +0,0 @@
----
-test: Simple Inline Array
-brief: >
- Sequences can be contained on a
- single line, using the inline syntax.
- Separate each entry with commas and
- enclose in square brackets.
-yaml: |
- seq: [ a, b, c ]
-php: |
- ['seq' => ['a', 'b', 'c']]
----
-test: Simple Inline Hash
-brief: >
- Mapping can also be contained on
- a single line, using the inline
- syntax. Each key-value pair is
- separated by a colon, with a comma
- between each entry in the mapping.
- Enclose with curly braces.
-yaml: |
- hash: { name: Steve, foo: bar }
-php: |
- ['hash' => ['name' => 'Steve', 'foo' => 'bar']]
----
-test: Multi-line Inline Collections
-todo: true
-brief: >
- Both inline sequences and inline mappings
- can span multiple lines, provided that you
- indent the additional lines.
-yaml: |
- languages: [ Ruby,
- Perl,
- Python ]
- websites: { YAML: yaml.org,
- Ruby: ruby-lang.org,
- Python: python.org,
- Perl: use.perl.org }
-php: |
- [
- 'languages' => ['Ruby', 'Perl', 'Python'],
- 'websites' => [
- 'YAML' => 'yaml.org',
- 'Ruby' => 'ruby-lang.org',
- 'Python' => 'python.org',
- 'Perl' => 'use.perl.org'
- ]
- ]
----
-test: Commas in Values (not in the spec!)
-todo: true
-brief: >
- List items in collections are delimited by commas, but
- there must be a space after each comma. This allows you
- to add numbers without quoting.
-yaml: |
- attendances: [ 45,123, 70,000, 17,222 ]
-php: |
- ['attendances' => [45123, 70000, 17222]]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsFoldedScalars.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsFoldedScalars.yml
deleted file mode 100644
index 2895202a..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsFoldedScalars.yml
+++ /dev/null
@@ -1,176 +0,0 @@
---- %YAML:1.0
-test: Single ending newline
-brief: >
- A pipe character, followed by an indented
- block of text is treated as a literal
- block, in which newlines are preserved
- throughout the block, including the final
- newline.
-yaml: |
- ---
- this: |
- Foo
- Bar
-php: |
- ['this' => "Foo\nBar\n"]
----
-test: The '+' indicator
-brief: >
- The '+' indicator says to keep newlines at the end of text
- blocks.
-yaml: |
- normal: |
- extra new lines not kept
-
- preserving: |+
- extra new lines are kept
-
-
- dummy: value
-php: |
- [
- 'normal' => "extra new lines not kept\n",
- 'preserving' => "extra new lines are kept\n\n\n",
- 'dummy' => 'value'
- ]
----
-test: Three trailing newlines in literals
-brief: >
- To give you more control over how space
- is preserved in text blocks, YAML has
- the keep '+' and chomp '-' indicators.
- The keep indicator will preserve all
- ending newlines, while the chomp indicator
- will strip all ending newlines.
-yaml: |
- clipped: |
- This has one newline.
-
-
-
- same as "clipped" above: "This has one newline.\n"
-
- stripped: |-
- This has no newline.
-
-
-
- same as "stripped" above: "This has no newline."
-
- kept: |+
- This has four newlines.
-
-
-
- same as "kept" above: "This has four newlines.\n\n\n\n"
-php: |
- [
- 'clipped' => "This has one newline.\n",
- 'same as "clipped" above' => "This has one newline.\n",
- 'stripped' => 'This has no newline.',
- 'same as "stripped" above' => 'This has no newline.',
- 'kept' => "This has four newlines.\n\n\n\n",
- 'same as "kept" above' => "This has four newlines.\n\n\n\n"
- ]
----
-test: Extra trailing newlines with spaces
-todo: true
-brief: >
- Normally, only a single newline is kept
- from the end of a literal block, unless the
- keep '+' character is used in combination
- with the pipe. The following example
- will preserve all ending whitespace
- since the last line of both literal blocks
- contains spaces which extend past the indentation
- level.
-yaml: |
- ---
- this: |
- Foo
-
-
- kept: |+
- Foo
-
-
-php: |
- ['this' => "Foo\n\n \n",
- 'kept' => "Foo\n\n \n"]
-
----
-test: Folded Block in a Sequence
-brief: >
- A greater-then character, followed by an indented
- block of text is treated as a folded block, in
- which lines of text separated by a single newline
- are concatenated as a single line.
-yaml: |
- ---
- - apple
- - banana
- - >
- can't you see
- the beauty of yaml?
- hmm
- - dog
-php: |
- [
- 'apple',
- 'banana',
- "can't you see the beauty of yaml? hmm\n",
- 'dog'
- ]
----
-test: Folded Block as a Mapping Value
-brief: >
- Both literal and folded blocks can be
- used in collections, as values in a
- sequence or a mapping.
-yaml: |
- ---
- quote: >
- Mark McGwire's
- year was crippled
- by a knee injury.
- source: espn
-php: |
- [
- 'quote' => "Mark McGwire's year was crippled by a knee injury.\n",
- 'source' => 'espn'
- ]
----
-test: Three trailing newlines in folded blocks
-brief: >
- The keep and chomp indicators can also
- be applied to folded blocks.
-yaml: |
- clipped: >
- This has one newline.
-
-
-
- same as "clipped" above: "This has one newline.\n"
-
- stripped: >-
- This has no newline.
-
-
-
- same as "stripped" above: "This has no newline."
-
- kept: >+
- This has four newlines.
-
-
-
- same as "kept" above: "This has four newlines.\n\n\n\n"
-php: |
- [
- 'clipped' => "This has one newline.\n",
- 'same as "clipped" above' => "This has one newline.\n",
- 'stripped' => 'This has no newline.',
- 'same as "stripped" above' => 'This has no newline.',
- 'kept' => "This has four newlines.\n\n\n\n",
- 'same as "kept" above' => "This has four newlines.\n\n\n\n"
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsNullsAndEmpties.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsNullsAndEmpties.yml
deleted file mode 100644
index ea8e36ed..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsNullsAndEmpties.yml
+++ /dev/null
@@ -1,45 +0,0 @@
---- %YAML:1.0
-test: Empty Sequence
-brief: >
- You can represent the empty sequence
- with an empty inline sequence.
-yaml: |
- empty: []
-php: |
- ['empty' => []]
----
-test: Empty Mapping
-brief: >
- You can represent the empty mapping
- with an empty inline mapping.
-yaml: |
- empty: {}
-php: |
- ['empty' => []]
----
-test: Empty Sequence as Entire Document
-yaml: |
- []
-php: |
- []
----
-test: Empty Mapping as Entire Document
-yaml: |
- {}
-php: |
- []
----
-test: Null as Document
-yaml: |
- ~
-php: |
- null
----
-test: Empty String
-brief: >
- You can represent an empty string
- with a pair of quotes.
-yaml: |
- ''
-php: |
- ''
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsSpecificationExamples.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsSpecificationExamples.yml
deleted file mode 100644
index dd2d776f..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsSpecificationExamples.yml
+++ /dev/null
@@ -1,1701 +0,0 @@
---- %YAML:1.0
-test: Sequence of scalars
-spec: 2.1
-yaml: |
- - Mark McGwire
- - Sammy Sosa
- - Ken Griffey
-php: |
- ['Mark McGwire', 'Sammy Sosa', 'Ken Griffey']
----
-test: Mapping of scalars to scalars
-spec: 2.2
-yaml: |
- hr: 65
- avg: 0.278
- rbi: 147
-php: |
- ['hr' => 65, 'avg' => 0.278, 'rbi' => 147]
----
-test: Mapping of scalars to sequences
-spec: 2.3
-yaml: |
- american:
- - Boston Red Sox
- - Detroit Tigers
- - New York Yankees
- national:
- - New York Mets
- - Chicago Cubs
- - Atlanta Braves
-php: |
- ['american' =>
- ['Boston Red Sox', 'Detroit Tigers',
- 'New York Yankees'],
- 'national' =>
- ['New York Mets', 'Chicago Cubs',
- 'Atlanta Braves']
- ]
----
-test: Sequence of mappings
-spec: 2.4
-yaml: |
- -
- name: Mark McGwire
- hr: 65
- avg: 0.278
- -
- name: Sammy Sosa
- hr: 63
- avg: 0.288
-php: |
- [
- ['name' => 'Mark McGwire', 'hr' => 65, 'avg' => 0.278],
- ['name' => 'Sammy Sosa', 'hr' => 63, 'avg' => 0.288]
- ]
----
-test: Legacy A5
-todo: true
-spec: legacy_A5
-yaml: |
- ?
- - New York Yankees
- - Atlanta Braves
- :
- - 2001-07-02
- - 2001-08-12
- - 2001-08-14
- ?
- - Detroit Tigers
- - Chicago Cubs
- :
- - 2001-07-23
-perl-busted: >
- YAML.pm will be able to emulate this behavior soon. In this regard
- it may be somewhat more correct than Python's native behavior which
- can only use tuples as mapping keys. PyYAML will also need to figure
- out some clever way to roundtrip structured keys.
-python: |
- [
- {
- ('New York Yankees', 'Atlanta Braves'):
- [yaml.timestamp('2001-07-02'),
- yaml.timestamp('2001-08-12'),
- yaml.timestamp('2001-08-14')],
- ('Detroit Tigers', 'Chicago Cubs'):
- [yaml.timestamp('2001-07-23')]
- }
- ]
-ruby: |
- {
- [ 'New York Yankees', 'Atlanta Braves' ] =>
- [ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), Date.new( 2001, 8, 14 ) ],
- [ 'Detroit Tigers', 'Chicago Cubs' ] =>
- [ Date.new( 2001, 7, 23 ) ]
- }
-syck: |
- struct test_node seq1[] = {
- { T_STR, 0, "New York Yankees" },
- { T_STR, 0, "Atlanta Braves" },
- end_node
- };
- struct test_node seq2[] = {
- { T_STR, 0, "2001-07-02" },
- { T_STR, 0, "2001-08-12" },
- { T_STR, 0, "2001-08-14" },
- end_node
- };
- struct test_node seq3[] = {
- { T_STR, 0, "Detroit Tigers" },
- { T_STR, 0, "Chicago Cubs" },
- end_node
- };
- struct test_node seq4[] = {
- { T_STR, 0, "2001-07-23" },
- end_node
- };
- struct test_node map[] = {
- { T_SEQ, 0, 0, seq1 },
- { T_SEQ, 0, 0, seq2 },
- { T_SEQ, 0, 0, seq3 },
- { T_SEQ, 0, 0, seq4 },
- end_node
- };
- struct test_node stream[] = {
- { T_MAP, 0, 0, map },
- end_node
- };
-
----
-test: Sequence of sequences
-spec: 2.5
-yaml: |
- - [ name , hr , avg ]
- - [ Mark McGwire , 65 , 0.278 ]
- - [ Sammy Sosa , 63 , 0.288 ]
-php: |
- [
- [ 'name', 'hr', 'avg' ],
- [ 'Mark McGwire', 65, 0.278 ],
- [ 'Sammy Sosa', 63, 0.288 ]
- ]
----
-test: Mapping of mappings
-todo: true
-spec: 2.6
-yaml: |
- Mark McGwire: {hr: 65, avg: 0.278}
- Sammy Sosa: {
- hr: 63,
- avg: 0.288
- }
-php: |
- [
- 'Mark McGwire' =>
- [ 'hr' => 65, 'avg' => 0.278 ],
- 'Sammy Sosa' =>
- [ 'hr' => 63, 'avg' => 0.288 ]
- ]
----
-test: Two documents in a stream each with a leading comment
-todo: true
-spec: 2.7
-yaml: |
- # Ranking of 1998 home runs
- ---
- - Mark McGwire
- - Sammy Sosa
- - Ken Griffey
-
- # Team ranking
- ---
- - Chicago Cubs
- - St Louis Cardinals
-ruby: |
- y = YAML::Stream.new
- y.add( [ 'Mark McGwire', 'Sammy Sosa', 'Ken Griffey' ] )
- y.add( [ 'Chicago Cubs', 'St Louis Cardinals' ] )
-documents: 2
-
----
-test: Play by play feed from a game
-todo: true
-spec: 2.8
-yaml: |
- ---
- time: 20:03:20
- player: Sammy Sosa
- action: strike (miss)
- ...
- ---
- time: 20:03:47
- player: Sammy Sosa
- action: grand slam
- ...
-perl: |
- [ 'Mark McGwire', 'Sammy Sosa', 'Ken Griffey' ]
-documents: 2
-
----
-test: Single document with two comments
-spec: 2.9
-yaml: |
- hr: # 1998 hr ranking
- - Mark McGwire
- - Sammy Sosa
- rbi:
- # 1998 rbi ranking
- - Sammy Sosa
- - Ken Griffey
-php: |
- [
- 'hr' => [ 'Mark McGwire', 'Sammy Sosa' ],
- 'rbi' => [ 'Sammy Sosa', 'Ken Griffey' ]
- ]
----
-test: Node for Sammy Sosa appears twice in this document
-spec: 2.10
-yaml: |
- ---
- hr:
- - Mark McGwire
- # Following node labeled SS
- - &SS Sammy Sosa
- rbi:
- - *SS # Subsequent occurrence
- - Ken Griffey
-php: |
- [
- 'hr' =>
- ['Mark McGwire', 'Sammy Sosa'],
- 'rbi' =>
- ['Sammy Sosa', 'Ken Griffey']
- ]
----
-test: Mapping between sequences
-todo: true
-spec: 2.11
-yaml: |
- ? # PLAY SCHEDULE
- - Detroit Tigers
- - Chicago Cubs
- :
- - 2001-07-23
-
- ? [ New York Yankees,
- Atlanta Braves ]
- : [ 2001-07-02, 2001-08-12,
- 2001-08-14 ]
-ruby: |
- {
- [ 'Detroit Tigers', 'Chicago Cubs' ] => [ Date.new( 2001, 7, 23 ) ],
- [ 'New York Yankees', 'Atlanta Braves' ] => [ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), Date.new( 2001, 8, 14 ) ]
- }
-syck: |
- struct test_node seq1[] = {
- { T_STR, 0, "New York Yankees" },
- { T_STR, 0, "Atlanta Braves" },
- end_node
- };
- struct test_node seq2[] = {
- { T_STR, 0, "2001-07-02" },
- { T_STR, 0, "2001-08-12" },
- { T_STR, 0, "2001-08-14" },
- end_node
- };
- struct test_node seq3[] = {
- { T_STR, 0, "Detroit Tigers" },
- { T_STR, 0, "Chicago Cubs" },
- end_node
- };
- struct test_node seq4[] = {
- { T_STR, 0, "2001-07-23" },
- end_node
- };
- struct test_node map[] = {
- { T_SEQ, 0, 0, seq3 },
- { T_SEQ, 0, 0, seq4 },
- { T_SEQ, 0, 0, seq1 },
- { T_SEQ, 0, 0, seq2 },
- end_node
- };
- struct test_node stream[] = {
- { T_MAP, 0, 0, map },
- end_node
- };
-
----
-test: Sequence key shortcut
-spec: 2.12
-yaml: |
- ---
- # products purchased
- - item : Super Hoop
- quantity: 1
- - item : Basketball
- quantity: 4
- - item : Big Shoes
- quantity: 1
-php: |
- [
- [
- 'item' => 'Super Hoop',
- 'quantity' => 1,
- ],
- [
- 'item' => 'Basketball',
- 'quantity' => 4,
- ],
- [
- 'item' => 'Big Shoes',
- 'quantity' => 1,
- ]
- ]
-perl: |
- [
- { item => 'Super Hoop', quantity => 1 },
- { item => 'Basketball', quantity => 4 },
- { item => 'Big Shoes', quantity => 1 }
- ]
-
-ruby: |
- [
- { 'item' => 'Super Hoop', 'quantity' => 1 },
- { 'item' => 'Basketball', 'quantity' => 4 },
- { 'item' => 'Big Shoes', 'quantity' => 1 }
- ]
-python: |
- [
- { 'item': 'Super Hoop', 'quantity': 1 },
- { 'item': 'Basketball', 'quantity': 4 },
- { 'item': 'Big Shoes', 'quantity': 1 }
- ]
-syck: |
- struct test_node map1[] = {
- { T_STR, 0, "item" },
- { T_STR, 0, "Super Hoop" },
- { T_STR, 0, "quantity" },
- { T_STR, 0, "1" },
- end_node
- };
- struct test_node map2[] = {
- { T_STR, 0, "item" },
- { T_STR, 0, "Basketball" },
- { T_STR, 0, "quantity" },
- { T_STR, 0, "4" },
- end_node
- };
- struct test_node map3[] = {
- { T_STR, 0, "item" },
- { T_STR, 0, "Big Shoes" },
- { T_STR, 0, "quantity" },
- { T_STR, 0, "1" },
- end_node
- };
- struct test_node seq[] = {
- { T_MAP, 0, 0, map1 },
- { T_MAP, 0, 0, map2 },
- { T_MAP, 0, 0, map3 },
- end_node
- };
- struct test_node stream[] = {
- { T_SEQ, 0, 0, seq },
- end_node
- };
-
-
----
-test: Literal perserves newlines
-todo: true
-spec: 2.13
-yaml: |
- # ASCII Art
- --- |
- \//||\/||
- // || ||_
-perl: |
- "\\//||\\/||\n// || ||_\n"
-ruby: |
- "\\//||\\/||\n// || ||_\n"
-python: |
- [
- flushLeft(
- """
- \//||\/||
- // || ||_
- """
- )
- ]
-syck: |
- struct test_node stream[] = {
- { T_STR, 0, "\\//||\\/||\n// || ||_\n" },
- end_node
- };
-
----
-test: Folded treats newlines as a space
-todo: true
-spec: 2.14
-yaml: |
- ---
- Mark McGwire's
- year was crippled
- by a knee injury.
-perl: |
- "Mark McGwire's year was crippled by a knee injury."
-ruby: |
- "Mark McGwire's year was crippled by a knee injury."
-python: |
- [ "Mark McGwire's year was crippled by a knee injury." ]
-syck: |
- struct test_node stream[] = {
- { T_STR, 0, "Mark McGwire's year was crippled by a knee injury." },
- end_node
- };
-
----
-test: Newlines preserved for indented and blank lines
-todo: true
-spec: 2.15
-yaml: |
- --- >
- Sammy Sosa completed another
- fine season with great stats.
-
- 63 Home Runs
- 0.288 Batting Average
-
- What a year!
-perl: |
- "Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n"
-ruby: |
- "Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n"
-python: |
- [
- flushLeft(
- """
- Sammy Sosa completed another fine season with great stats.
-
- 63 Home Runs
- 0.288 Batting Average
-
- What a year!
- """
- )
- ]
-syck: |
- struct test_node stream[] = {
- { T_STR, 0, "Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n" },
- end_node
- };
-
-
----
-test: Indentation determines scope
-spec: 2.16
-yaml: |
- name: Mark McGwire
- accomplishment: >
- Mark set a major league
- home run record in 1998.
- stats: |
- 65 Home Runs
- 0.278 Batting Average
-php: |
- [
- 'name' => 'Mark McGwire',
- 'accomplishment' => "Mark set a major league home run record in 1998.\n",
- 'stats' => "65 Home Runs\n0.278 Batting Average\n"
- ]
----
-test: Quoted scalars
-todo: true
-spec: 2.17
-yaml: |
- unicode: "Sosa did fine.\u263A"
- control: "\b1998\t1999\t2000\n"
- hexesc: "\x0D\x0A is \r\n"
-
- single: '"Howdy!" he cried.'
- quoted: ' # not a ''comment''.'
- tie-fighter: '|\-*-/|'
-ruby: |
- {
- "tie-fighter" => "|\\-*-/|",
- "control"=>"\0101998\t1999\t2000\n",
- "unicode"=>"Sosa did fine." + ["263A".hex ].pack('U*'),
- "quoted"=>" # not a 'comment'.",
- "single"=>"\"Howdy!\" he cried.",
- "hexesc"=>"\r\n is \r\n"
- }
----
-test: Multiline flow scalars
-todo: true
-spec: 2.18
-yaml: |
- plain:
- This unquoted scalar
- spans many lines.
-
- quoted: "So does this
- quoted scalar.\n"
-ruby: |
- {
- 'plain' => 'This unquoted scalar spans many lines.',
- 'quoted' => "So does this quoted scalar.\n"
- }
----
-test: Integers
-spec: 2.19
-yaml: |
- canonical: 12345
- octal: 014
- hexadecimal: 0xC
-php: |
- [
- 'canonical' => 12345,
- 'octal' => 014,
- 'hexadecimal' => 0xC
- ]
----
-test: Decimal Integer
-deprecated: true
-spec: 2.19
-yaml: |
- decimal: +12,345
-php: |
- [
- 'decimal' => 12345.0,
- ]
----
-# FIX: spec shows parens around -inf and NaN
-test: Floating point
-spec: 2.20
-yaml: |
- canonical: 1.23015e+3
- exponential: 12.3015e+02
- negative infinity: -.inf
- not a number: .NaN
- float as whole number: !!float 1
-php: |
- [
- 'canonical' => 1230.15,
- 'exponential' => 1230.15,
- 'negative infinity' => log(0),
- 'not a number' => -log(0),
- 'float as whole number' => (float) 1
- ]
----
-test: Fixed Floating point
-deprecated: true
-spec: 2.20
-yaml: |
- fixed: 1,230.15
-php: |
- [
- 'fixed' => 1230.15,
- ]
----
-test: Timestamps
-todo: true
-spec: 2.22
-yaml: |
- canonical: 2001-12-15T02:59:43.1Z
- iso8601: 2001-12-14t21:59:43.10-05:00
- spaced: 2001-12-14 21:59:43.10 -05:00
- date: 2002-12-14 # Time is noon UTC
-php: |
- [
- 'canonical' => YAML::mktime( 2001, 12, 15, 2, 59, 43, 0.10 ),
- 'iso8601' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
- 'spaced' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
- 'date' => Date.new( 2002, 12, 14 )
- ]
----
-test: legacy Timestamps test
-todo: true
-spec: legacy D4
-yaml: |
- canonical: 2001-12-15T02:59:43.00Z
- iso8601: 2001-02-28t21:59:43.00-05:00
- spaced: 2001-12-14 21:59:43.00 -05:00
- date: 2002-12-14
-php: |
- [
- 'canonical' => Time::utc( 2001, 12, 15, 2, 59, 43, 0 ),
- 'iso8601' => YAML::mktime( 2001, 2, 28, 21, 59, 43, 0, "-05:00" ),
- 'spaced' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0, "-05:00" ),
- 'date' => Date.new( 2002, 12, 14 )
- ]
----
-test: Various explicit families
-todo: true
-spec: 2.23
-yaml: |
- not-date: !!str 2002-04-28
- picture: !binary |
- R0lGODlhDAAMAIQAAP//9/X
- 17unp5WZmZgAAAOfn515eXv
- Pz7Y6OjuDg4J+fn5OTk6enp
- 56enmleECcgggoBADs=
-
- application specific tag: !!something |
- The semantics of the tag
- above may be different for
- different documents.
-
-ruby-setup: |
- YAML.add_private_type( "something" ) do |type, val|
- "SOMETHING: #{val}"
- end
-ruby: |
- {
- 'not-date' => '2002-04-28',
- 'picture' => "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236i^\020' \202\n\001\000;",
- 'application specific tag' => "SOMETHING: The semantics of the tag\nabove may be different for\ndifferent documents.\n"
- }
----
-test: Application specific family
-todo: true
-spec: 2.24
-yaml: |
- # Establish a tag prefix
- --- !clarkevans.com,2002/graph/^shape
- # Use the prefix: shorthand for
- # !clarkevans.com,2002/graph/circle
- - !^circle
- center: &ORIGIN {x: 73, 'y': 129}
- radius: 7
- - !^line # !clarkevans.com,2002/graph/line
- start: *ORIGIN
- finish: { x: 89, 'y': 102 }
- - !^label
- start: *ORIGIN
- color: 0xFFEEBB
- value: Pretty vector drawing.
-ruby-setup: |
- YAML.add_domain_type( "clarkevans.com,2002", 'graph/shape' ) { |type, val|
- if Array === val
- val << "Shape Container"
- val
- else
- raise YAML::Error, "Invalid graph of class #{ val.class }: " + val.inspect
- end
- }
- one_shape_proc = Proc.new { |type, val|
- scheme, domain, type = type.split( /:/, 3 )
- if val.is_a? ::Hash
- val['TYPE'] = "Shape: #{type}"
- val
- else
- raise YAML::Error, "Invalid graph of class #{ val.class }: " + val.inspect
- end
- }
- YAML.add_domain_type( "clarkevans.com,2002", 'graph/circle', &one_shape_proc )
- YAML.add_domain_type( "clarkevans.com,2002", 'graph/line', &one_shape_proc )
- YAML.add_domain_type( "clarkevans.com,2002", 'graph/label', &one_shape_proc )
-ruby: |
- [
- {
- "radius" => 7,
- "center"=>
- {
- "x" => 73,
- "y" => 129
- },
- "TYPE" => "Shape: graph/circle"
- }, {
- "finish" =>
- {
- "x" => 89,
- "y" => 102
- },
- "TYPE" => "Shape: graph/line",
- "start" =>
- {
- "x" => 73,
- "y" => 129
- }
- }, {
- "TYPE" => "Shape: graph/label",
- "value" => "Pretty vector drawing.",
- "start" =>
- {
- "x" => 73,
- "y" => 129
- },
- "color" => 16772795
- },
- "Shape Container"
- ]
-# ---
-# test: Unordered set
-# spec: 2.25
-# yaml: |
-# # sets are represented as a
-# # mapping where each key is
-# # associated with the empty string
-# --- !set
-# ? Mark McGwire
-# ? Sammy Sosa
-# ? Ken Griff
----
-test: Ordered mappings
-todo: true
-spec: 2.26
-yaml: |
- # ordered maps are represented as
- # a sequence of mappings, with
- # each mapping having one key
- --- !omap
- - Mark McGwire: 65
- - Sammy Sosa: 63
- - Ken Griffy: 58
-ruby: |
- YAML::Omap[
- 'Mark McGwire', 65,
- 'Sammy Sosa', 63,
- 'Ken Griffy', 58
- ]
----
-test: Invoice
-dump_skip: true
-spec: 2.27
-yaml: |
- --- !clarkevans.com,2002/^invoice
- invoice: 34843
- date : 2001-01-23
- bill-to: &id001
- given : Chris
- family : Dumars
- address:
- lines: |
- 458 Walkman Dr.
- Suite #292
- city : Royal Oak
- state : MI
- postal : 48046
- ship-to: *id001
- product:
- -
- sku : BL394D
- quantity : 4
- description : Basketball
- price : 450.00
- -
- sku : BL4438H
- quantity : 1
- description : Super Hoop
- price : 2392.00
- tax : 251.42
- total: 4443.52
- comments: >
- Late afternoon is best.
- Backup contact is Nancy
- Billsmer @ 338-4338.
-php: |
- [
- 'invoice' => 34843, 'date' => gmmktime(0, 0, 0, 1, 23, 2001),
- 'bill-to' =>
- [ 'given' => 'Chris', 'family' => 'Dumars', 'address' => [ 'lines' => "458 Walkman Dr.\nSuite #292\n", 'city' => 'Royal Oak', 'state' => 'MI', 'postal' => 48046 ] ]
- , 'ship-to' =>
- [ 'given' => 'Chris', 'family' => 'Dumars', 'address' => [ 'lines' => "458 Walkman Dr.\nSuite #292\n", 'city' => 'Royal Oak', 'state' => 'MI', 'postal' => 48046 ] ]
- , 'product' =>
- [
- [ 'sku' => 'BL394D', 'quantity' => 4, 'description' => 'Basketball', 'price' => 450.00 ],
- [ 'sku' => 'BL4438H', 'quantity' => 1, 'description' => 'Super Hoop', 'price' => 2392.00 ]
- ],
- 'tax' => 251.42, 'total' => 4443.52,
- 'comments' => "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.\n"
- ]
----
-test: Log file
-todo: true
-spec: 2.28
-yaml: |
- ---
- Time: 2001-11-23 15:01:42 -05:00
- User: ed
- Warning: >
- This is an error message
- for the log file
- ---
- Time: 2001-11-23 15:02:31 -05:00
- User: ed
- Warning: >
- A slightly different error
- message.
- ---
- Date: 2001-11-23 15:03:17 -05:00
- User: ed
- Fatal: >
- Unknown variable "bar"
- Stack:
- - file: TopClass.py
- line: 23
- code: |
- x = MoreObject("345\n")
- - file: MoreClass.py
- line: 58
- code: |-
- foo = bar
-ruby: |
- y = YAML::Stream.new
- y.add( { 'Time' => YAML::mktime( 2001, 11, 23, 15, 01, 42, 00, "-05:00" ),
- 'User' => 'ed', 'Warning' => "This is an error message for the log file\n" } )
- y.add( { 'Time' => YAML::mktime( 2001, 11, 23, 15, 02, 31, 00, "-05:00" ),
- 'User' => 'ed', 'Warning' => "A slightly different error message.\n" } )
- y.add( { 'Date' => YAML::mktime( 2001, 11, 23, 15, 03, 17, 00, "-05:00" ),
- 'User' => 'ed', 'Fatal' => "Unknown variable \"bar\"\n",
- 'Stack' => [
- { 'file' => 'TopClass.py', 'line' => 23, 'code' => "x = MoreObject(\"345\\n\")\n" },
- { 'file' => 'MoreClass.py', 'line' => 58, 'code' => "foo = bar" } ] } )
-documents: 3
-
----
-test: Throwaway comments
-yaml: |
- ### These are four throwaway comment ###
-
- ### lines (the second line is empty). ###
- this: | # Comments may trail lines.
- contains three lines of text.
- The third one starts with a
- # character. This isn't a comment.
-
- # These are three throwaway comment
- # lines (the first line is empty).
-php: |
- [
- 'this' => "contains three lines of text.\nThe third one starts with a\n# character. This isn't a comment.\n"
- ]
----
-test: Document with a single value
-todo: true
-yaml: |
- --- >
- This YAML stream contains a single text value.
- The next stream is a log file - a sequence of
- log entries. Adding an entry to the log is a
- simple matter of appending it at the end.
-ruby: |
- "This YAML stream contains a single text value. The next stream is a log file - a sequence of log entries. Adding an entry to the log is a simple matter of appending it at the end.\n"
----
-test: Document stream
-todo: true
-yaml: |
- ---
- at: 2001-08-12 09:25:00.00 Z
- type: GET
- HTTP: '1.0'
- url: '/index.html'
- ---
- at: 2001-08-12 09:25:10.00 Z
- type: GET
- HTTP: '1.0'
- url: '/toc.html'
-ruby: |
- y = YAML::Stream.new
- y.add( {
- 'at' => Time::utc( 2001, 8, 12, 9, 25, 00 ),
- 'type' => 'GET',
- 'HTTP' => '1.0',
- 'url' => '/index.html'
- } )
- y.add( {
- 'at' => Time::utc( 2001, 8, 12, 9, 25, 10 ),
- 'type' => 'GET',
- 'HTTP' => '1.0',
- 'url' => '/toc.html'
- } )
-documents: 2
-
----
-test: Top level mapping
-yaml: |
- # This stream is an example of a top-level mapping.
- invoice : 34843
- date : 2001-01-23
- total : 4443.52
-php: |
- [
- 'invoice' => 34843,
- 'date' => gmmktime(0, 0, 0, 1, 23, 2001),
- 'total' => 4443.52
- ]
----
-test: Single-line documents
-todo: true
-yaml: |
- # The following is a sequence of three documents.
- # The first contains an empty mapping, the second
- # an empty sequence, and the last an empty string.
- --- {}
- --- [ ]
- --- ''
-ruby: |
- y = YAML::Stream.new
- y.add( {} )
- y.add( [] )
- y.add( '' )
-documents: 3
-
----
-test: Document with pause
-todo: true
-yaml: |
- # A communication channel based on a YAML stream.
- ---
- sent at: 2002-06-06 11:46:25.10 Z
- payload: Whatever
- # Receiver can process this as soon as the following is sent:
- ...
- # Even if the next message is sent long after:
- ---
- sent at: 2002-06-06 12:05:53.47 Z
- payload: Whatever
- ...
-ruby: |
- y = YAML::Stream.new
- y.add(
- { 'sent at' => YAML::mktime( 2002, 6, 6, 11, 46, 25, 0.10 ),
- 'payload' => 'Whatever' }
- )
- y.add(
- { "payload" => "Whatever", "sent at" => YAML::mktime( 2002, 6, 6, 12, 5, 53, 0.47 ) }
- )
-documents: 2
-
----
-test: Explicit typing
-deprecated: Using the non-specific tag "!" is deprecated since Symfony 3.4 as its behavior will change in 4.0.
-yaml: |
- integer: 12
- also int: ! "12"
- string: !!str 12
-php: |
- [ 'integer' => 12, 'also int' => 12, 'string' => '12' ]
----
-test: Private types
-todo: true
-yaml: |
- # Both examples below make use of the 'x-private:ball'
- # type family URI, but with different semantics.
- ---
- pool: !!ball
- number: 8
- color: black
- ---
- bearing: !!ball
- material: steel
-ruby: |
- y = YAML::Stream.new
- y.add( { 'pool' =>
- YAML::PrivateType.new( 'ball',
- { 'number' => 8, 'color' => 'black' } ) }
- )
- y.add( { 'bearing' =>
- YAML::PrivateType.new( 'ball',
- { 'material' => 'steel' } ) }
- )
-documents: 2
-
----
-test: Type family under yaml.org
-yaml: |
- # The URI is 'tag:yaml.org,2002:str'
- - !!str a Unicode string
-php: |
- [ 'a Unicode string' ]
----
-test: Type family under perl.yaml.org
-todo: true
-yaml: |
- # The URI is 'tag:perl.yaml.org,2002:Text::Tabs'
- - !perl/Text::Tabs {}
-ruby: |
- [ YAML::DomainType.new( 'perl.yaml.org,2002', 'Text::Tabs', {} ) ]
----
-test: Type family under clarkevans.com
-todo: true
-yaml: |
- # The URI is 'tag:clarkevans.com,2003-02:timesheet'
- - !clarkevans.com,2003-02/timesheet {}
-ruby: |
- [ YAML::DomainType.new( 'clarkevans.com,2003-02', 'timesheet', {} ) ]
----
-test: URI Escaping
-todo: true
-yaml: |
- same:
- - !domain.tld,2002/type\x30 value
- - !domain.tld,2002/type0 value
- different: # As far as the YAML parser is concerned
- - !domain.tld,2002/type%30 value
- - !domain.tld,2002/type0 value
-ruby-setup: |
- YAML.add_domain_type( "domain.tld,2002", "type0" ) { |type, val|
- "ONE: #{val}"
- }
- YAML.add_domain_type( "domain.tld,2002", "type%30" ) { |type, val|
- "TWO: #{val}"
- }
-ruby: |
- { 'same' => [ 'ONE: value', 'ONE: value' ], 'different' => [ 'TWO: value', 'ONE: value' ] }
----
-test: URI Prefixing
-todo: true
-yaml: |
- # 'tag:domain.tld,2002:invoice' is some type family.
- invoice: !domain.tld,2002/^invoice
- # 'seq' is shorthand for 'tag:yaml.org,2002:seq'.
- # This does not effect '^customer' below
- # because it is does not specify a prefix.
- customers: !seq
- # '^customer' is shorthand for the full
- # notation 'tag:domain.tld,2002:customer'.
- - !^customer
- given : Chris
- family : Dumars
-ruby-setup: |
- YAML.add_domain_type( "domain.tld,2002", /(invoice|customer)/ ) { |type, val|
- if val.is_a? ::Hash
- scheme, domain, type = type.split( /:/, 3 )
- val['type'] = "domain #{type}"
- val
- else
- raise YAML::Error, "Not a Hash in domain.tld/invoice: " + val.inspect
- end
- }
-ruby: |
- { "invoice"=> { "customers"=> [ { "given"=>"Chris", "type"=>"domain customer", "family"=>"Dumars" } ], "type"=>"domain invoice" } }
-
----
-test: Overriding anchors
-yaml: |
- anchor : &A001 This scalar has an anchor.
- override : &A001 >
- The alias node below is a
- repeated use of this value.
- alias : *A001
-php: |
- [ 'anchor' => 'This scalar has an anchor.',
- 'override' => "The alias node below is a repeated use of this value.\n",
- 'alias' => "The alias node below is a repeated use of this value.\n"]
----
-test: Flow and block formatting
-todo: true
-yaml: |
- empty: []
- flow: [ one, two, three # May span lines,
- , four, # indentation is
- five ] # mostly ignored.
- block:
- - First item in top sequence
- -
- - Subordinate sequence entry
- - >
- A folded sequence entry
- - Sixth item in top sequence
-ruby: |
- { 'empty' => [], 'flow' => [ 'one', 'two', 'three', 'four', 'five' ],
- 'block' => [ 'First item in top sequence', [ 'Subordinate sequence entry' ],
- "A folded sequence entry\n", 'Sixth item in top sequence' ] }
----
-test: Complete mapping test
-todo: true
-yaml: |
- empty: {}
- flow: { one: 1, two: 2 }
- spanning: { one: 1,
- two: 2 }
- block:
- first : First entry
- second:
- key: Subordinate mapping
- third:
- - Subordinate sequence
- - { }
- - Previous mapping is empty.
- - A key: value pair in a sequence.
- A second: key:value pair.
- - The previous entry is equal to the following one.
- -
- A key: value pair in a sequence.
- A second: key:value pair.
- !float 12 : This key is a float.
- ? >
- ?
- : This key had to be protected.
- "\a" : This key had to be escaped.
- ? >
- This is a
- multi-line
- folded key
- : Whose value is
- also multi-line.
- ? this also works as a key
- : with a value at the next line.
- ?
- - This key
- - is a sequence
- :
- - With a sequence value.
- ?
- This: key
- is a: mapping
- :
- with a: mapping value.
-ruby: |
- { 'empty' => {}, 'flow' => { 'one' => 1, 'two' => 2 },
- 'spanning' => { 'one' => 1, 'two' => 2 },
- 'block' => { 'first' => 'First entry', 'second' =>
- { 'key' => 'Subordinate mapping' }, 'third' =>
- [ 'Subordinate sequence', {}, 'Previous mapping is empty.',
- { 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' },
- 'The previous entry is equal to the following one.',
- { 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' } ],
- 12.0 => 'This key is a float.', "?\n" => 'This key had to be protected.',
- "\a" => 'This key had to be escaped.',
- "This is a multi-line folded key\n" => "Whose value is also multi-line.",
- 'this also works as a key' => 'with a value at the next line.',
- [ 'This key', 'is a sequence' ] => [ 'With a sequence value.' ] } }
- # Couldn't recreate map exactly, so we'll do a detailed check to be sure it's entact
- obj_y['block'].keys.each { |k|
- if Hash === k
- v = obj_y['block'][k]
- if k['This'] == 'key' and k['is a'] == 'mapping' and v['with a'] == 'mapping value.'
- obj_r['block'][k] = v
- end
- end
- }
----
-test: Literal explicit indentation
-yaml: |
- # Explicit indentation must
- # be given in all the three
- # following cases.
- leading spaces: |2
- This value starts with four spaces.
-
- leading line break: |2
-
- This value starts with a line break.
-
- leading comment indicator: |2
- # first line starts with a
- # character.
-
- # Explicit indentation may
- # also be given when it is
- # not required.
- redundant: |2
- This value is indented 2 spaces.
-php: |
- [
- 'leading spaces' => " This value starts with four spaces.\n",
- 'leading line break' => "\nThis value starts with a line break.\n",
- 'leading comment indicator' => "# first line starts with a\n# character.\n",
- 'redundant' => "This value is indented 2 spaces.\n"
- ]
----
-test: Chomping and keep modifiers
-yaml: |
- clipped: |
- This has one newline.
-
- same as "clipped" above: "This has one newline.\n"
-
- stripped: |-
- This has no newline.
-
- same as "stripped" above: "This has no newline."
-
- kept: |+
- This has two newlines.
-
- same as "kept" above: "This has two newlines.\n\n"
-php: |
- [
- 'clipped' => "This has one newline.\n",
- 'same as "clipped" above' => "This has one newline.\n",
- 'stripped' => 'This has no newline.',
- 'same as "stripped" above' => 'This has no newline.',
- 'kept' => "This has two newlines.\n\n",
- 'same as "kept" above' => "This has two newlines.\n\n"
- ]
----
-test: Literal combinations
-todo: true
-yaml: |
- empty: |
-
- literal: |
- The \ ' " characters may be
- freely used. Leading white
- space is significant.
-
- Line breaks are significant.
- Thus this value contains one
- empty line and ends with a
- single line break, but does
- not start with one.
-
- is equal to: "The \\ ' \" characters may \
- be\nfreely used. Leading white\n space \
- is significant.\n\nLine breaks are \
- significant.\nThus this value contains \
- one\nempty line and ends with a\nsingle \
- line break, but does\nnot start with one.\n"
-
- # Comments may follow a block
- # scalar value. They must be
- # less indented.
-
- # Modifiers may be combined in any order.
- indented and chomped: |2-
- This has no newline.
-
- also written as: |-2
- This has no newline.
-
- both are equal to: " This has no newline."
-php: |
- [
- 'empty' => '',
- 'literal' => "The \\ ' \" characters may be\nfreely used. Leading white\n space " +
- "is significant.\n\nLine breaks are significant.\nThus this value contains one\n" +
- "empty line and ends with a\nsingle line break, but does\nnot start with one.\n",
- 'is equal to' => "The \\ ' \" characters may be\nfreely used. Leading white\n space " +
- "is significant.\n\nLine breaks are significant.\nThus this value contains one\n" +
- "empty line and ends with a\nsingle line break, but does\nnot start with one.\n",
- 'indented and chomped' => ' This has no newline.',
- 'also written as' => ' This has no newline.',
- 'both are equal to' => ' This has no newline.'
- [
----
-test: Folded combinations
-todo: true
-yaml: |
- empty: >
-
- one paragraph: >
- Line feeds are converted
- to spaces, so this value
- contains no line breaks
- except for the final one.
-
- multiple paragraphs: >2
-
- An empty line, either
- at the start or in
- the value:
-
- Is interpreted as a
- line break. Thus this
- value contains three
- line breaks.
-
- indented text: >
- This is a folded
- paragraph followed
- by a list:
- * first entry
- * second entry
- Followed by another
- folded paragraph,
- another list:
-
- * first entry
-
- * second entry
-
- And a final folded
- paragraph.
-
- above is equal to: |
- This is a folded paragraph followed by a list:
- * first entry
- * second entry
- Followed by another folded paragraph, another list:
-
- * first entry
-
- * second entry
-
- And a final folded paragraph.
-
- # Explicit comments may follow
- # but must be less indented.
-php: |
- [
- 'empty' => '',
- 'one paragraph' => 'Line feeds are converted to spaces, so this value'.
- " contains no line breaks except for the final one.\n",
- 'multiple paragraphs' => "\nAn empty line, either at the start or in the value:\n".
- "Is interpreted as a line break. Thus this value contains three line breaks.\n",
- 'indented text' => "This is a folded paragraph followed by a list:\n".
- " * first entry\n * second entry\nFollowed by another folded paragraph, ".
- "another list:\n\n * first entry\n\n * second entry\n\nAnd a final folded paragraph.\n",
- 'above is equal to' => "This is a folded paragraph followed by a list:\n".
- " * first entry\n * second entry\nFollowed by another folded paragraph, ".
- "another list:\n\n * first entry\n\n * second entry\n\nAnd a final folded paragraph.\n"
- ]
----
-test: Single quotes
-todo: true
-yaml: |
- empty: ''
- second: '! : \ etc. can be used freely.'
- third: 'a single quote '' must be escaped.'
- span: 'this contains
- six spaces
-
- and one
- line break'
- is same as: "this contains six spaces\nand one line break"
-php: |
- [
- 'empty' => '',
- 'second' => '! : \\ etc. can be used freely.',
- 'third' => "a single quote ' must be escaped.",
- 'span' => "this contains six spaces\nand one line break",
- 'is same as' => "this contains six spaces\nand one line break"
- ]
----
-test: Double quotes
-todo: true
-yaml: |
- empty: ""
- second: "! : etc. can be used freely."
- third: "a \" or a \\ must be escaped."
- fourth: "this value ends with an LF.\n"
- span: "this contains
- four \
- spaces"
- is equal to: "this contains four spaces"
-php: |
- [
- 'empty' => '',
- 'second' => '! : etc. can be used freely.',
- 'third' => 'a " or a \\ must be escaped.',
- 'fourth' => "this value ends with an LF.\n",
- 'span' => "this contains four spaces",
- 'is equal to' => "this contains four spaces"
- ]
----
-test: Unquoted strings
-todo: true
-yaml: |
- first: There is no unquoted empty string.
-
- second: 12 ## This is an integer.
-
- third: !!str 12 ## This is a string.
-
- span: this contains
- six spaces
-
- and one
- line break
-
- indicators: this has no comments.
- #:foo and bar# are
- both text.
-
- flow: [ can span
- lines, # comment
- like
- this ]
-
- note: { one-line keys: but multi-line values }
-
-php: |
- [
- 'first' => 'There is no unquoted empty string.',
- 'second' => 12,
- 'third' => '12',
- 'span' => "this contains six spaces\nand one line break",
- 'indicators' => "this has no comments. #:foo and bar# are both text.",
- 'flow' => [ 'can span lines', 'like this' ],
- 'note' => { 'one-line keys' => 'but multi-line values' }
- ]
----
-test: Spanning sequences
-todo: true
-yaml: |
- # The following are equal seqs
- # with different identities.
- flow: [ one, two ]
- spanning: [ one,
- two ]
- block:
- - one
- - two
-php: |
- [
- 'flow' => [ 'one', 'two' ],
- 'spanning' => [ 'one', 'two' ],
- 'block' => [ 'one', 'two' ]
- ]
----
-test: Flow mappings
-yaml: |
- # The following are equal maps
- # with different identities.
- flow: { one: 1, two: 2 }
- block:
- one: 1
- two: 2
-php: |
- [
- 'flow' => [ 'one' => 1, 'two' => 2 ],
- 'block' => [ 'one' => 1, 'two' => 2 ]
- ]
----
-test: Representations of 12
-todo: true
-yaml: |
- - 12 # An integer
- # The following scalars
- # are loaded to the
- # string value '1' '2'.
- - !!str 12
- - '12'
- - "12"
- - "\
- 1\
- 2\
- "
- # Strings containing paths and regexps can be unquoted:
- - /foo/bar
- - d:/foo/bar
- - foo/bar
- - /a.*b/
-php: |
- [ 12, '12', '12', '12', '12', '/foo/bar', 'd:/foo/bar', 'foo/bar', '/a.*b/' ]
----
-test: "Null"
-todo: true
-yaml: |
- canonical: ~
-
- english: null
-
- # This sequence has five
- # entries, two with values.
- sparse:
- - ~
- - 2nd entry
- - Null
- - 4th entry
- -
-
- four: This mapping has five keys,
- only two with values.
-
-php: |
- [
- 'canonical' => null,
- 'english' => null,
- 'sparse' => [ null, '2nd entry', null, '4th entry', null ]],
- 'four' => 'This mapping has five keys, only two with values.'
- ]
----
-test: Omap
-todo: true
-yaml: |
- # Explicitly typed dictionary.
- Bestiary: !omap
- - aardvark: African pig-like ant eater. Ugly.
- - anteater: South-American ant eater. Two species.
- - anaconda: South-American constrictor snake. Scary.
- # Etc.
-ruby: |
- {
- 'Bestiary' => YAML::Omap[
- 'aardvark', 'African pig-like ant eater. Ugly.',
- 'anteater', 'South-American ant eater. Two species.',
- 'anaconda', 'South-American constrictor snake. Scary.'
- ]
- }
-
----
-test: Pairs
-todo: true
-yaml: |
- # Explicitly typed pairs.
- tasks: !pairs
- - meeting: with team.
- - meeting: with boss.
- - break: lunch.
- - meeting: with client.
-ruby: |
- {
- 'tasks' => YAML::Pairs[
- 'meeting', 'with team.',
- 'meeting', 'with boss.',
- 'break', 'lunch.',
- 'meeting', 'with client.'
- ]
- }
-
----
-test: Set
-todo: true
-yaml: |
- # Explicitly typed set.
- baseball players: !set
- Mark McGwire:
- Sammy Sosa:
- Ken Griffey:
-ruby: |
- {
- 'baseball players' => YAML::Set[
- 'Mark McGwire', nil,
- 'Sammy Sosa', nil,
- 'Ken Griffey', nil
- ]
- }
-
----
-test: Integer
-yaml: |
- canonical: 12345
- octal: 014
- hexadecimal: 0xC
-php: |
- [
- 'canonical' => 12345,
- 'octal' => 12,
- 'hexadecimal' => 12
- ]
----
-test: Decimal
-deprecated: true
-yaml: |
- decimal: +12,345
-php: |
- [
- 'decimal' => 12345.0,
- ]
----
-test: Fixed Float
-deprecated: true
-yaml: |
- fixed: 1,230.15
-php: |
- [
- 'fixed' => 1230.15,
- ]
----
-test: Float
-yaml: |
- canonical: 1.23015e+3
- exponential: 12.3015e+02
- negative infinity: -.inf
- not a number: .NaN
-php: |
- [
- 'canonical' => 1230.15,
- 'exponential' => 1230.15,
- 'negative infinity' => log(0),
- 'not a number' => -log(0)
- ]
----
-test: Timestamp
-todo: true
-yaml: |
- canonical: 2001-12-15T02:59:43.1Z
- valid iso8601: 2001-12-14t21:59:43.10-05:00
- space separated: 2001-12-14 21:59:43.10 -05:00
- date (noon UTC): 2002-12-14
-ruby: |
- [
- 'canonical' => YAML::mktime( 2001, 12, 15, 2, 59, 43, 0.10 ),
- 'valid iso8601' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
- 'space separated' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
- 'date (noon UTC)' => Date.new( 2002, 12, 14 )
- ]
----
-test: Binary
-todo: true
-yaml: |
- canonical: !binary "\
- R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5\
- OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+\
- +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC\
- AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="
- base64: !binary |
- R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
- OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
- +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
- AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
- description: >
- The binary value above is a tiny arrow
- encoded as a gif image.
-ruby-setup: |
- arrow_gif = "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236iiiccc\243\243\243\204\204\204\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371!\376\016Made with GIMP\000,\000\000\000\000\f\000\f\000\000\005, \216\2010\236\343@\024\350i\020\304\321\212\010\034\317\200M$z\357\3770\205p\270\2601f\r\e\316\001\303\001\036\020' \202\n\001\000;"
-ruby: |
- {
- 'canonical' => arrow_gif,
- 'base64' => arrow_gif,
- 'description' => "The binary value above is a tiny arrow encoded as a gif image.\n"
- }
-
----
-test: Merge key
-todo: true
-yaml: |
- ---
- - &CENTER { x: 1, y: 2 }
- - &LEFT { x: 0, y: 2 }
- - &BIG { r: 10 }
- - &SMALL { r: 1 }
-
- # All the following maps are equal:
-
- - # Explicit keys
- x: 1
- y: 2
- r: 10
- label: center/big
-
- - # Merge one map
- << : *CENTER
- r: 10
- label: center/big
-
- - # Merge multiple maps
- << : [ *CENTER, *BIG ]
- label: center/big
-
- - # Override
- << : [ *BIG, *LEFT, *SMALL ]
- x: 1
- label: center/big
-
-ruby-setup: |
- center = { 'x' => 1, 'y' => 2 }
- left = { 'x' => 0, 'y' => 2 }
- big = { 'r' => 10 }
- small = { 'r' => 1 }
- node1 = { 'x' => 1, 'y' => 2, 'r' => 10, 'label' => 'center/big' }
- node2 = center.dup
- node2.update( { 'r' => 10, 'label' => 'center/big' } )
- node3 = big.dup
- node3.update( center )
- node3.update( { 'label' => 'center/big' } )
- node4 = small.dup
- node4.update( left )
- node4.update( big )
- node4.update( { 'x' => 1, 'label' => 'center/big' } )
-
-ruby: |
- [
- center, left, big, small, node1, node2, node3, node4
- ]
-
----
-test: Default key
-todo: true
-yaml: |
- --- # Old schema
- link with:
- - library1.dll
- - library2.dll
- --- # New schema
- link with:
- - = : library1.dll
- version: 1.2
- - = : library2.dll
- version: 2.3
-ruby: |
- y = YAML::Stream.new
- y.add( { 'link with' => [ 'library1.dll', 'library2.dll' ] } )
- obj_h = Hash[ 'version' => 1.2 ]
- obj_h.default = 'library1.dll'
- obj_h2 = Hash[ 'version' => 2.3 ]
- obj_h2.default = 'library2.dll'
- y.add( { 'link with' => [ obj_h, obj_h2 ] } )
-documents: 2
-
----
-test: Special keys
-todo: true
-yaml: |
- "!": These three keys
- "&": had to be quoted
- "=": and are normal strings.
- # NOTE: the following node should NOT be serialized this way.
- encoded node :
- !special '!' : '!type'
- !special|canonical '&' : 12
- = : value
- # The proper way to serialize the above node is as follows:
- node : !!type &12 value
-ruby: |
- { '!' => 'These three keys', '&' => 'had to be quoted',
- '=' => 'and are normal strings.',
- 'encoded node' => YAML::PrivateType.new( 'type', 'value' ),
- 'node' => YAML::PrivateType.new( 'type', 'value' ) }
diff --git a/vendor/symfony/yaml/Tests/Fixtures/YtsTypeTransfers.yml b/vendor/symfony/yaml/Tests/Fixtures/YtsTypeTransfers.yml
deleted file mode 100644
index e96b5536..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/YtsTypeTransfers.yml
+++ /dev/null
@@ -1,266 +0,0 @@
---- %YAML:1.0
-test: Strings
-brief: >
- Any group of characters beginning with an
- alphabetic or numeric character is a string,
- unless it belongs to one of the groups below
- (such as an Integer or Time).
-yaml: |
- String
-php: |
- 'String'
----
-test: String characters
-brief: >
- A string can contain any alphabetic or
- numeric character, along with many
- punctuation characters, including the
- period, dash, space, quotes, exclamation, and
- question mark.
-yaml: |
- - What's Yaml?
- - It's for writing data structures in plain text.
- - And?
- - And what? That's not good enough for you?
- - No, I mean, "And what about Yaml?"
- - Oh, oh yeah. Uh.. Yaml for Ruby.
-php: |
- [
- "What's Yaml?",
- "It's for writing data structures in plain text.",
- "And?",
- "And what? That's not good enough for you?",
- "No, I mean, \"And what about Yaml?\"",
- "Oh, oh yeah. Uh.. Yaml for Ruby."
- ]
----
-test: Indicators in Strings
-brief: >
- Be careful using indicators in strings. In particular,
- the comma, colon, and pound sign must be used carefully.
-yaml: |
- the colon followed by space is an indicator: but is a string:right here
- same for the pound sign: here we have it#in a string
- the comma can, honestly, be used in most cases: [ but not in, inline collections ]
-php: |
- [
- 'the colon followed by space is an indicator' => 'but is a string:right here',
- 'same for the pound sign' => 'here we have it#in a string',
- 'the comma can, honestly, be used in most cases' => ['but not in', 'inline collections']
- ]
----
-test: Forcing Strings
-brief: >
- Any YAML type can be forced into a string using the
- explicit !!str method.
-yaml: |
- date string: !!str 2001-08-01
- number string: !!str 192
-php: |
- [
- 'date string' => '2001-08-01',
- 'number string' => '192'
- ]
----
-test: Single-quoted Strings
-brief: >
- You can also enclose your strings within single quotes,
- which allows use of slashes, colons, and other indicators
- freely. Inside single quotes, you can represent a single
- quote in your string by using two single quotes next to
- each other.
-yaml: |
- all my favorite symbols: '#:!/%.)'
- a few i hate: '&(*'
- why do i hate them?: 'it''s very hard to explain'
- entities: '£ me'
-php: |
- [
- 'all my favorite symbols' => '#:!/%.)',
- 'a few i hate' => '&(*',
- 'why do i hate them?' => 'it\'s very hard to explain',
- 'entities' => '£ me'
- ]
----
-test: Double-quoted Strings
-brief: >
- Enclosing strings in double quotes allows you
- to use escapings to represent ASCII and
- Unicode characters.
-yaml: |
- i know where i want my line breaks: "one here\nand another here\n"
-php: |
- [
- 'i know where i want my line breaks' => "one here\nand another here\n"
- ]
----
-test: Multi-line Quoted Strings
-todo: true
-brief: >
- Both single- and double-quoted strings may be
- carried on to new lines in your YAML document.
- They must be indented a step and indentation
- is interpreted as a single space.
-yaml: |
- i want a long string: "so i'm going to
- let it go on and on to other lines
- until i end it with a quote."
-php: |
- ['i want a long string' => "so i'm going to ".
- "let it go on and on to other lines ".
- "until i end it with a quote."
- ]
-
----
-test: Plain scalars
-todo: true
-brief: >
- Unquoted strings may also span multiple lines, if they
- are free of YAML space indicators and indented.
-yaml: |
- - My little toe is broken in two places;
- - I'm crazy to have skied this way;
- - I'm not the craziest he's seen, since there was always the German guy
- who skied for 3 hours on a broken shin bone (just below the kneecap);
- - Nevertheless, second place is respectable, and he doesn't
- recommend going for the record;
- - He's going to put my foot in plaster for a month;
- - This would impair my skiing ability somewhat for the
- duration, as can be imagined.
-php: |
- [
- "My little toe is broken in two places;",
- "I'm crazy to have skied this way;",
- "I'm not the craziest he's seen, since there was always ".
- "the German guy who skied for 3 hours on a broken shin ".
- "bone (just below the kneecap);",
- "Nevertheless, second place is respectable, and he doesn't ".
- "recommend going for the record;",
- "He's going to put my foot in plaster for a month;",
- "This would impair my skiing ability somewhat for the duration, ".
- "as can be imagined."
- ]
----
-test: 'Null'
-brief: >
- You can use the tilde '~' character for a null value.
-yaml: |
- name: Mr. Show
- hosted by: Bob and David
- date of next season: ~
-php: |
- [
- 'name' => 'Mr. Show',
- 'hosted by' => 'Bob and David',
- 'date of next season' => null
- ]
----
-test: Boolean
-brief: >
- You can use 'true' and 'false' for Boolean values.
-yaml: |
- Is Gus a Liar?: true
- Do I rely on Gus for Sustenance?: false
-php: |
- [
- 'Is Gus a Liar?' => true,
- 'Do I rely on Gus for Sustenance?' => false
- ]
----
-test: Integers
-dump_skip: true
-brief: >
- An integer is a series of numbers, optionally
- starting with a positive or negative sign. Integers
- may also contain commas for readability.
-yaml: |
- zero: 0
- simple: 12
-php: |
- [
- 'zero' => 0,
- 'simple' => 12,
- ]
----
-test: Positive Big Integer
-deprecated: true
-dump_skip: true
-brief: >
- An integer is a series of numbers, optionally
- starting with a positive or negative sign. Integers
- may also contain commas for readability.
-yaml: |
- one-thousand: 1,000
-php: |
- [
- 'one-thousand' => 1000.0,
- ]
----
-test: Negative Big Integer
-deprecated: true
-dump_skip: true
-brief: >
- An integer is a series of numbers, optionally
- starting with a positive or negative sign. Integers
- may also contain commas for readability.
-yaml: |
- negative one-thousand: -1,000
-php: |
- [
- 'negative one-thousand' => -1000.0
- ]
----
-test: Floats
-dump_skip: true
-brief: >
- Floats are represented by numbers with decimals,
- allowing for scientific notation, as well as
- positive and negative infinity and "not a number."
-yaml: |
- a simple float: 2.00
- scientific notation: 1.00009e+3
-php: |
- [
- 'a simple float' => 2.0,
- 'scientific notation' => 1000.09
- ]
----
-test: Larger Float
-dump_skip: true
-deprecated: true
-brief: >
- Floats are represented by numbers with decimals,
- allowing for scientific notation, as well as
- positive and negative infinity and "not a number."
-yaml: |
- larger float: 1,000.09
-php: |
- [
- 'larger float' => 1000.09,
- ]
----
-test: Time
-todo: true
-brief: >
- You can represent timestamps by using
- ISO8601 format, or a variation which
- allows spaces between the date, time and
- time zone.
-yaml: |
- iso8601: 2001-12-14t21:59:43.10-05:00
- space separated: 2001-12-14 21:59:43.10 -05:00
-php: |
- [
- 'iso8601' => mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
- 'space separated' => mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" )
- ]
----
-test: Date
-todo: true
-brief: >
- A date can be represented by its year,
- month and day in ISO8601 order.
-yaml: |
- 1976-07-31
-php: |
- date( 1976, 7, 31 )
diff --git a/vendor/symfony/yaml/Tests/Fixtures/arrow.gif b/vendor/symfony/yaml/Tests/Fixtures/arrow.gif
deleted file mode 100644
index 443aca42..00000000
Binary files a/vendor/symfony/yaml/Tests/Fixtures/arrow.gif and /dev/null differ
diff --git a/vendor/symfony/yaml/Tests/Fixtures/booleanMappingKeys.yml b/vendor/symfony/yaml/Tests/Fixtures/booleanMappingKeys.yml
deleted file mode 100644
index 88287f1b..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/booleanMappingKeys.yml
+++ /dev/null
@@ -1,11 +0,0 @@
---- %YAML:1.0
-test: Miscellaneous
-spec: 2.21
-yaml: |
- true: true
- false: false
-php: |
- [
- 'true' => true,
- 'false' => false,
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/embededPhp.yml b/vendor/symfony/yaml/Tests/Fixtures/embededPhp.yml
deleted file mode 100644
index ec456ed0..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/embededPhp.yml
+++ /dev/null
@@ -1 +0,0 @@
-value:
diff --git a/vendor/symfony/yaml/Tests/Fixtures/escapedCharacters.yml b/vendor/symfony/yaml/Tests/Fixtures/escapedCharacters.yml
deleted file mode 100644
index 87d352db..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/escapedCharacters.yml
+++ /dev/null
@@ -1,155 +0,0 @@
-test: outside double quotes
-yaml: |
- \0 \ \a \b \n
-php: |
- "\\0 \\ \\a \\b \\n"
----
-test: 'null'
-yaml: |
- "\0"
-php: |
- "\x00"
----
-test: bell
-yaml: |
- "\a"
-php: |
- "\x07"
----
-test: backspace
-yaml: |
- "\b"
-php: |
- "\x08"
----
-test: horizontal tab (1)
-yaml: |
- "\t"
-php: |
- "\x09"
----
-test: horizontal tab (2)
-yaml: |
- "\ "
-php: |
- "\x09"
----
-test: line feed
-yaml: |
- "\n"
-php: |
- "\x0a"
----
-test: vertical tab
-yaml: |
- "\v"
-php: |
- "\x0b"
----
-test: form feed
-yaml: |
- "\f"
-php: |
- "\x0c"
----
-test: carriage return
-yaml: |
- "\r"
-php: |
- "\x0d"
----
-test: escape
-yaml: |
- "\e"
-php: |
- "\x1b"
----
-test: space
-yaml: |
- "\ "
-php: |
- "\x20"
----
-test: slash
-yaml: |
- "\/"
-php: |
- "\x2f"
----
-test: backslash
-yaml: |
- "\\"
-php: |
- "\\"
----
-test: Unicode next line
-yaml: |
- "\N"
-php: |
- "\xc2\x85"
----
-test: Unicode non-breaking space
-yaml: |
- "\_"
-php: |
- "\xc2\xa0"
----
-test: Unicode line separator
-yaml: |
- "\L"
-php: |
- "\xe2\x80\xa8"
----
-test: Unicode paragraph separator
-yaml: |
- "\P"
-php: |
- "\xe2\x80\xa9"
----
-test: Escaped 8-bit Unicode
-yaml: |
- "\x42"
-php: |
- "B"
----
-test: Escaped 16-bit Unicode
-yaml: |
- "\u20ac"
-php: |
- "\xe2\x82\xac"
----
-test: Escaped 32-bit Unicode
-yaml: |
- "\U00000043"
-php: |
- "C"
----
-test: Example 5.13 Escaped Characters
-note: |
- Currently throws an error parsing first line. Maybe Symfony Yaml doesn't support
- continuation of string across multiple lines? Keeping test here but disabled.
-todo: true
-yaml: |
- "Fun with \\
- \" \a \b \e \f \
- \n \r \t \v \0 \
- \ \_ \N \L \P \
- \x41 \u0041 \U00000041"
-php: |
- "Fun with \x5C\n\x22 \x07 \x08 \x1B \x0C\n\x0A \x0D \x09 \x0B \x00\n\x20 \xA0 \x85 \xe2\x80\xa8 \xe2\x80\xa9\nA A A"
----
-test: Double quotes with a line feed
-yaml: |
- { double: "some value\n \"some quoted string\" and 'some single quotes one'" }
-php: |
- [
- 'double' => "some value\n \"some quoted string\" and 'some single quotes one'"
- ]
----
-test: Backslashes
-yaml: |
- { single: 'foo\Var', no-quotes: foo\Var, double: "foo\\Var" }
-php: |
- [
- 'single' => 'foo\Var', 'no-quotes' => 'foo\Var', 'double' => 'foo\Var'
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/index.yml b/vendor/symfony/yaml/Tests/Fixtures/index.yml
deleted file mode 100644
index 3216a89e..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/index.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-- escapedCharacters
-- sfComments
-- sfCompact
-- sfTests
-- sfObjects
-- sfMergeKey
-- sfQuotes
-- YtsAnchorAlias
-- YtsBasicTests
-- YtsBlockMapping
-- YtsDocumentSeparator
-- YtsErrorTests
-- YtsFlowCollections
-- YtsFoldedScalars
-- YtsNullsAndEmpties
-- YtsSpecificationExamples
-- YtsTypeTransfers
-- unindentedCollections
diff --git a/vendor/symfony/yaml/Tests/Fixtures/legacyBooleanMappingKeys.yml b/vendor/symfony/yaml/Tests/Fixtures/legacyBooleanMappingKeys.yml
deleted file mode 100644
index db950165..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/legacyBooleanMappingKeys.yml
+++ /dev/null
@@ -1,23 +0,0 @@
---- %YAML:1.0
-test: Miscellaneous
-spec: 2.21
-yaml: |
- true: true
- false: false
-php: |
- [
- 1 => true,
- 0 => false,
- ]
----
-test: Boolean
-yaml: |
- false: used as key
- logical: true
- answer: false
-php: |
- [
- false => 'used as key',
- 'logical' => true,
- 'answer' => false
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/legacyNonStringKeys.yml b/vendor/symfony/yaml/Tests/Fixtures/legacyNonStringKeys.yml
deleted file mode 100644
index 4e282018..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/legacyNonStringKeys.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-- legacyBooleanMappingKeys
-- legacyNullMappingKey
diff --git a/vendor/symfony/yaml/Tests/Fixtures/legacyNullMappingKey.yml b/vendor/symfony/yaml/Tests/Fixtures/legacyNullMappingKey.yml
deleted file mode 100644
index 14f93c2d..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/legacyNullMappingKey.yml
+++ /dev/null
@@ -1,9 +0,0 @@
---- %YAML:1.0
-test: Miscellaneous
-spec: 2.21
-yaml: |
- null: ~
-php: |
- [
- '' => null,
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block.yml b/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block.yml
deleted file mode 100644
index 9d72f09b..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-data:
- single_line: 'foo bar baz'
- multi_line: |
- foo
- line with trailing spaces:
-
- bar
- integer like line:
- 123456789
- empty line:
-
- baz
- multi_line_with_carriage_return: "foo\nbar\r\nbaz"
- nested_inlined_multi_line_string: { inlined_multi_line: "foo\nbar\r\nempty line:\n\nbaz" }
diff --git a/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_for_tagged_values.yml b/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_for_tagged_values.yml
deleted file mode 100644
index f8c9112f..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_for_tagged_values.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-data:
- foo: !bar "foo\r\nline with trailing spaces:\n \nbar\ninteger like line:\n123456789\nempty line:\n\nbaz"
diff --git a/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_leading_space_in_first_line.yml b/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_leading_space_in_first_line.yml
deleted file mode 100644
index 3f2dedd1..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_leading_space_in_first_line.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-data:
- multi_line: |4
- the first line has leading spaces
- The second line does not.
diff --git a/vendor/symfony/yaml/Tests/Fixtures/nonStringKeys.yml b/vendor/symfony/yaml/Tests/Fixtures/nonStringKeys.yml
deleted file mode 100644
index 354b0791..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/nonStringKeys.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-- booleanMappingKeys
-- numericMappingKeys
-- nullMappingKey
diff --git a/vendor/symfony/yaml/Tests/Fixtures/not_readable.yml b/vendor/symfony/yaml/Tests/Fixtures/not_readable.yml
deleted file mode 100644
index 3216a89e..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/not_readable.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-- escapedCharacters
-- sfComments
-- sfCompact
-- sfTests
-- sfObjects
-- sfMergeKey
-- sfQuotes
-- YtsAnchorAlias
-- YtsBasicTests
-- YtsBlockMapping
-- YtsDocumentSeparator
-- YtsErrorTests
-- YtsFlowCollections
-- YtsFoldedScalars
-- YtsNullsAndEmpties
-- YtsSpecificationExamples
-- YtsTypeTransfers
-- unindentedCollections
diff --git a/vendor/symfony/yaml/Tests/Fixtures/nullMappingKey.yml b/vendor/symfony/yaml/Tests/Fixtures/nullMappingKey.yml
deleted file mode 100644
index cd90f7b4..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/nullMappingKey.yml
+++ /dev/null
@@ -1,9 +0,0 @@
---- %YAML:1.0
-test: Miscellaneous
-spec: 2.21
-yaml: |
- null: ~
-php: |
- [
- 'null' => null,
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/numericMappingKeys.yml b/vendor/symfony/yaml/Tests/Fixtures/numericMappingKeys.yml
deleted file mode 100644
index 246447e4..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/numericMappingKeys.yml
+++ /dev/null
@@ -1,23 +0,0 @@
---- %YAML:1.0
-test: A sequence with an unordered array
-brief: >
- A sequence with an unordered array
-yaml: |
- 1: foo
- 0: bar
-php: |
- [1 => 'foo', 0 => 'bar']
----
-test: Integers as Map Keys
-brief: >
- An integer can be used as dictionary key.
-yaml: |
- 1: one
- 2: two
- 3: three
-php: |
- [
- 1 => 'one',
- 2 => 'two',
- 3 => 'three'
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/sfComments.yml b/vendor/symfony/yaml/Tests/Fixtures/sfComments.yml
deleted file mode 100644
index 4b0c91c9..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/sfComments.yml
+++ /dev/null
@@ -1,90 +0,0 @@
---- %YAML:1.0
-test: Comments at the end of a line
-brief: >
- Comments at the end of a line
-yaml: |
- ex1: "foo # bar"
- ex2: "foo # bar" # comment
- ex3: 'foo # bar' # comment
- ex4: foo # comment
- ex5: foo # comment with tab before
- ex6: foo#foo # comment here
- ex7: foo # ignore me # and me
-php: |
- ['ex1' => 'foo # bar', 'ex2' => 'foo # bar', 'ex3' => 'foo # bar', 'ex4' => 'foo', 'ex5' => 'foo', 'ex6' => 'foo#foo', 'ex7' => 'foo']
----
-test: Comments in the middle
-brief: >
- Comments in the middle
-yaml: |
- foo:
- # some comment
- # some comment
- bar: foo
- # some comment
- # some comment
-php: |
- ['foo' => ['bar' => 'foo']]
----
-test: Comments on a hash line
-brief: >
- Comments on a hash line
-yaml: |
- foo: # a comment
- foo: bar # a comment
-php: |
- ['foo' => ['foo' => 'bar']]
----
-test: 'Value starting with a #'
-brief: >
- 'Value starting with a #'
-yaml: |
- foo: '#bar'
-php: |
- ['foo' => '#bar']
----
-test: Document starting with a comment and a separator
-brief: >
- Commenting before document start is allowed
-yaml: |
- # document comment
- ---
- foo: bar # a comment
-php: |
- ['foo' => 'bar']
----
-test: Comment containing a colon on a hash line
-brief: >
- Comment containing a colon on a scalar line
-yaml: 'foo # comment: this is also part of the comment'
-php: |
- 'foo'
----
-test: 'Hash key containing a #'
-brief: >
- 'Hash key containing a #'
-yaml: 'foo#bar: baz'
-php: |
- ['foo#bar' => 'baz']
----
-test: 'Hash key ending with a space and a #'
-brief: >
- 'Hash key ending with a space and a #'
-yaml: |
- 'foo #': baz
-php: |
- ['foo #' => 'baz']
----
-test: Comment before first item in unindented collection
-brief: >
- Comment directly before unindented collection is allowed
-yaml: |
- collection1:
- # comment
- - a
- - b
- collection2:
- - a
- - b
-php: |
- ['collection1' => ['a', 'b'], 'collection2' => ['a', 'b']]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/sfCompact.yml b/vendor/symfony/yaml/Tests/Fixtures/sfCompact.yml
deleted file mode 100644
index 8cadae2c..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/sfCompact.yml
+++ /dev/null
@@ -1,159 +0,0 @@
---- %YAML:1.0
-test: Compact notation
-brief: |
- Compact notation for sets of mappings with single element
-yaml: |
- ---
- # products purchased
- - item : Super Hoop
- - item : Basketball
- quantity: 1
- - item:
- name: Big Shoes
- nick: Biggies
- quantity: 1
-php: |
- [
- [
- 'item' => 'Super Hoop',
- ],
- [
- 'item' => 'Basketball',
- 'quantity' => 1,
- ],
- [
- 'item' => [
- 'name' => 'Big Shoes',
- 'nick' => 'Biggies'
- ],
- 'quantity' => 1
- ]
- ]
----
-test: Compact notation combined with inline notation
-brief: |
- Combinations of compact and inline notation are allowed
-yaml: |
- ---
- items:
- - { item: Super Hoop, quantity: 1 }
- - [ Basketball, Big Shoes ]
-php: |
- [
- 'items' => [
- [
- 'item' => 'Super Hoop',
- 'quantity' => 1,
- ],
- [
- 'Basketball',
- 'Big Shoes'
- ]
- ]
- ]
---- %YAML:1.0
-test: Compact notation
-brief: |
- Compact notation for sets of mappings with single element
-yaml: |
- ---
- # products purchased
- - item : Super Hoop
- - item : Basketball
- quantity: 1
- - item:
- name: Big Shoes
- nick: Biggies
- quantity: 1
-php: |
- [
- [
- 'item' => 'Super Hoop',
- ],
- [
- 'item' => 'Basketball',
- 'quantity' => 1,
- ],
- [
- 'item' => [
- 'name' => 'Big Shoes',
- 'nick' => 'Biggies'
- ],
- 'quantity' => 1
- ]
- ]
----
-test: Compact notation combined with inline notation
-brief: |
- Combinations of compact and inline notation are allowed
-yaml: |
- ---
- items:
- - { item: Super Hoop, quantity: 1 }
- - [ Basketball, Big Shoes ]
-php: |
- [
- 'items' => [
- [
- 'item' => 'Super Hoop',
- 'quantity' => 1,
- ],
- [
- 'Basketball',
- 'Big Shoes'
- ]
- ]
- ]
---- %YAML:1.0
-test: Compact notation
-brief: |
- Compact notation for sets of mappings with single element
-yaml: |
- ---
- # products purchased
- - item : Super Hoop
- - item : Basketball
- quantity: 1
- - item:
- name: Big Shoes
- nick: Biggies
- quantity: 1
-php: |
- [
- [
- 'item' => 'Super Hoop',
- ],
- [
- 'item' => 'Basketball',
- 'quantity' => 1,
- ],
- [
- 'item' => [
- 'name' => 'Big Shoes',
- 'nick' => 'Biggies'
- ],
- 'quantity' => 1
- ]
- ]
----
-test: Compact notation combined with inline notation
-brief: |
- Combinations of compact and inline notation are allowed
-yaml: |
- ---
- items:
- - { item: Super Hoop, quantity: 1 }
- - [ Basketball, Big Shoes ]
-php: |
- [
- 'items' => [
- [
- 'item' => 'Super Hoop',
- 'quantity' => 1,
- ],
- [
- 'Basketball',
- 'Big Shoes'
- ]
- ]
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/sfMergeKey.yml b/vendor/symfony/yaml/Tests/Fixtures/sfMergeKey.yml
deleted file mode 100644
index af787ae4..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/sfMergeKey.yml
+++ /dev/null
@@ -1,61 +0,0 @@
---- %YAML:1.0
-test: Simple In Place Substitution
-brief: >
- If you want to reuse an entire alias, only overwriting what is different
- you can use a << in place substitution. This is not part of the official
- YAML spec, but a widely implemented extension. See the following URL for
- details: http://yaml.org/type/merge.html
-yaml: |
- foo: &foo
- a: Steve
- b: Clark
- c: Brian
- e: notnull
- bar:
- a: before
- d: other
- e: ~
- <<: *foo
- b: new
- x: Oren
- c:
- foo: bar
- bar: foo
- bar_inline: {a: before, d: other, <<: *foo, b: new, x: Oren, c: { foo: bar, bar: foo}}
- foo2: &foo2
- a: Ballmer
- ding: &dong [ fi, fei, fo, fam]
- check:
- <<:
- - *foo
- - *dong
- isit: tested
- head:
- <<: [ *foo , *dong , *foo2 ]
- taz: &taz
- a: Steve
- w:
- p: 1234
- nested:
- <<: *taz
- d: Doug
- w: &nestedref
- p: 12345
- z:
- <<: *nestedref
- head_inline: &head_inline { <<: [ *foo , *dong , *foo2 ] }
- recursive_inline: { <<: *head_inline, c: { <<: *foo2 } }
-php: |
- [
- 'foo' => ['a' => 'Steve', 'b' => 'Clark', 'c' => 'Brian', 'e' => 'notnull'],
- 'bar' => ['a' => 'before', 'd' => 'other', 'e' => null, 'b' => 'new', 'c' => ['foo' => 'bar', 'bar' => 'foo'], 'x' => 'Oren'],
- 'bar_inline' => ['a' => 'before', 'd' => 'other', 'b' => 'new', 'c' => ['foo' => 'bar', 'bar' => 'foo'], 'e' => 'notnull', 'x' => 'Oren'],
- 'foo2' => ['a' => 'Ballmer'],
- 'ding' => ['fi', 'fei', 'fo', 'fam'],
- 'check' => ['a' => 'Steve', 'b' => 'Clark', 'c' => 'Brian', 'e' => 'notnull', 'fi', 'fei', 'fo', 'fam', 'isit' => 'tested'],
- 'head' => ['a' => 'Steve', 'b' => 'Clark', 'c' => 'Brian', 'e' => 'notnull', 'fi', 'fei', 'fo', 'fam'],
- 'taz' => ['a' => 'Steve', 'w' => ['p' => 1234]],
- 'nested' => ['a' => 'Steve', 'w' => ['p' => 12345], 'd' => 'Doug', 'z' => ['p' => 12345]],
- 'head_inline' => ['a' => 'Steve', 'b' => 'Clark', 'c' => 'Brian', 'e' => 'notnull', 'fi', 'fei', 'fo', 'fam'],
- 'recursive_inline' => ['a' => 'Steve', 'b' => 'Clark', 'c' => ['a' => 'Ballmer'], 'e' => 'notnull', 'fi', 'fei', 'fo', 'fam'],
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/sfObjects.yml b/vendor/symfony/yaml/Tests/Fixtures/sfObjects.yml
deleted file mode 100644
index 144615f2..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/sfObjects.yml
+++ /dev/null
@@ -1,11 +0,0 @@
---- %YAML:1.0
-test: Objects
-brief: >
- Comments at the end of a line
-yaml: |
- ex1: "foo # bar"
- ex2: "foo # bar" # comment
- ex3: 'foo # bar' # comment
- ex4: foo # comment
-php: |
- ['ex1' => 'foo # bar', 'ex2' => 'foo # bar', 'ex3' => 'foo # bar', 'ex4' => 'foo']
diff --git a/vendor/symfony/yaml/Tests/Fixtures/sfQuotes.yml b/vendor/symfony/yaml/Tests/Fixtures/sfQuotes.yml
deleted file mode 100644
index c8326fdb..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/sfQuotes.yml
+++ /dev/null
@@ -1,33 +0,0 @@
---- %YAML:1.0
-test: Some characters at the beginning of a string must be escaped
-brief: >
- Some characters at the beginning of a string must be escaped
-yaml: |
- foo: '| bar'
-php: |
- ['foo' => '| bar']
----
-test: A key can be a quoted string
-brief: >
- A key can be a quoted string
-yaml: |
- "foo1": bar
- 'foo2': bar
- "foo \" bar": bar
- 'foo '' bar': bar
- 'foo3: ': bar
- "foo4: ": bar
- foo5: { "foo \" bar: ": bar, 'foo '' bar: ': bar }
-php: |
- [
- 'foo1' => 'bar',
- 'foo2' => 'bar',
- 'foo " bar' => 'bar',
- 'foo \' bar' => 'bar',
- 'foo3: ' => 'bar',
- 'foo4: ' => 'bar',
- 'foo5' => [
- 'foo " bar: ' => 'bar',
- 'foo \' bar: ' => 'bar',
- ],
- ]
diff --git a/vendor/symfony/yaml/Tests/Fixtures/sfTests.yml b/vendor/symfony/yaml/Tests/Fixtures/sfTests.yml
deleted file mode 100644
index 2ea417a7..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/sfTests.yml
+++ /dev/null
@@ -1,140 +0,0 @@
---- %YAML:1.0
-test: Multiple quoted string on one line
-brief: >
- Multiple quoted string on one line
-yaml: |
- stripped_title: { name: "foo bar", help: "bar foo" }
-php: |
- ['stripped_title' => ['name' => 'foo bar', 'help' => 'bar foo']]
----
-test: Empty sequence
-yaml: |
- foo: [ ]
-php: |
- ['foo' => []]
----
-test: Empty value
-yaml: |
- foo:
-php: |
- ['foo' => null]
----
-test: Inline string parsing
-brief: >
- Inline string parsing
-yaml: |
- test: ['complex: string', 'another [string]']
-php: |
- ['test' => ['complex: string', 'another [string]']]
----
-test: Boolean
-brief: >
- Boolean
-yaml: |
- - false
- - true
- - null
- - ~
- - 'false'
- - 'true'
- - 'null'
- - '~'
-php: |
- [
- false,
- true,
- null,
- null,
- 'false',
- 'true',
- 'null',
- '~',
- ]
----
-test: Empty lines in literal blocks
-brief: >
- Empty lines in literal blocks
-yaml: |
- foo:
- bar: |
- foo
-
-
-
- bar
-php: |
- ['foo' => ['bar' => "foo\n\n\n \nbar\n"]]
----
-test: Empty lines in folded blocks
-brief: >
- Empty lines in folded blocks
-yaml: |
- foo:
- bar: >
-
- foo
-
-
- bar
-php: |
- ['foo' => ['bar' => "\nfoo\n\nbar\n"]]
----
-test: IP addresses
-brief: >
- IP addresses
-yaml: |
- foo: 10.0.0.2
-php: |
- ['foo' => '10.0.0.2']
----
-test: A sequence with an embedded mapping
-brief: >
- A sequence with an embedded mapping
-yaml: |
- - foo
- - bar: { bar: foo }
-php: |
- ['foo', ['bar' => ['bar' => 'foo']]]
----
-test: Octal
-brief: as in spec example 2.19, octal value is converted
-yaml: |
- foo: 0123
-php: |
- ['foo' => 83]
----
-test: Octal strings
-brief: Octal notation in a string must remain a string
-yaml: |
- foo: "0123"
-php: |
- ['foo' => '0123']
----
-test: Octal strings
-brief: Octal notation in a string must remain a string
-yaml: |
- foo: '0123'
-php: |
- ['foo' => '0123']
----
-test: Octal strings
-brief: Octal notation in a string must remain a string
-yaml: |
- foo: |
- 0123
-php: |
- ['foo' => "0123\n"]
----
-test: Document as a simple hash
-brief: Document as a simple hash
-yaml: |
- { foo: bar }
-php: |
- ['foo' => 'bar']
----
-test: Document as a simple array
-brief: Document as a simple array
-yaml: |
- [ foo, bar ]
-php: |
- ['foo', 'bar']
diff --git a/vendor/symfony/yaml/Tests/Fixtures/unindentedCollections.yml b/vendor/symfony/yaml/Tests/Fixtures/unindentedCollections.yml
deleted file mode 100644
index c85952df..00000000
--- a/vendor/symfony/yaml/Tests/Fixtures/unindentedCollections.yml
+++ /dev/null
@@ -1,82 +0,0 @@
---- %YAML:1.0
-test: Unindented collection
-brief: >
- Unindented collection
-yaml: |
- collection:
- - item1
- - item2
- - item3
-php: |
- ['collection' => ['item1', 'item2', 'item3']]
----
-test: Nested unindented collection (two levels)
-brief: >
- Nested unindented collection
-yaml: |
- collection:
- key:
- - a
- - b
- - c
-php: |
- ['collection' => ['key' => ['a', 'b', 'c']]]
----
-test: Nested unindented collection (three levels)
-brief: >
- Nested unindented collection
-yaml: |
- collection:
- key:
- subkey:
- - one
- - two
- - three
-php: |
- ['collection' => ['key' => ['subkey' => ['one', 'two', 'three']]]]
----
-test: Key/value after unindented collection (1)
-brief: >
- Key/value after unindented collection (1)
-yaml: |
- collection:
- key:
- - a
- - b
- - c
- foo: bar
-php: |
- ['collection' => ['key' => ['a', 'b', 'c']], 'foo' => 'bar']
----
-test: Key/value after unindented collection (at the same level)
-brief: >
- Key/value after unindented collection
-yaml: |
- collection:
- key:
- - a
- - b
- - c
- foo: bar
-php: |
- ['collection' => ['key' => ['a', 'b', 'c'], 'foo' => 'bar']]
----
-test: Shortcut Key after unindented collection
-brief: >
- Key/value after unindented collection
-yaml: |
- collection:
- - key: foo
- foo: bar
-php: |
- ['collection' => [['key' => 'foo', 'foo' => 'bar']]]
----
-test: Shortcut Key after unindented collection with custom spaces
-brief: >
- Key/value after unindented collection
-yaml: |
- collection:
- - key: foo
- foo: bar
-php: |
- ['collection' => [['key' => 'foo', 'foo' => 'bar']]]
diff --git a/vendor/symfony/yaml/Tests/InlineTest.php b/vendor/symfony/yaml/Tests/InlineTest.php
deleted file mode 100644
index f64cc682..00000000
--- a/vendor/symfony/yaml/Tests/InlineTest.php
+++ /dev/null
@@ -1,873 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Yaml\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Yaml\Exception\ParseException;
-use Symfony\Component\Yaml\Inline;
-use Symfony\Component\Yaml\Yaml;
-
-class InlineTest extends TestCase
-{
- protected function setUp()
- {
- Inline::initialize(0, 0);
- }
-
- /**
- * @dataProvider getTestsForParse
- */
- public function testParse($yaml, $value, $flags = 0)
- {
- $this->assertSame($value, Inline::parse($yaml, $flags), sprintf('::parse() converts an inline YAML to a PHP structure (%s)', $yaml));
- }
-
- /**
- * @dataProvider getTestsForParseWithMapObjects
- */
- public function testParseWithMapObjects($yaml, $value, $flags = Yaml::PARSE_OBJECT_FOR_MAP)
- {
- $actual = Inline::parse($yaml, $flags);
-
- $this->assertSame(serialize($value), serialize($actual));
- }
-
- /**
- * @dataProvider getTestsForParsePhpConstants
- */
- public function testParsePhpConstants($yaml, $value)
- {
- $actual = Inline::parse($yaml, Yaml::PARSE_CONSTANT);
-
- $this->assertSame($value, $actual);
- }
-
- public function getTestsForParsePhpConstants()
- {
- return [
- ['!php/const Symfony\Component\Yaml\Yaml::PARSE_CONSTANT', Yaml::PARSE_CONSTANT],
- ['!php/const PHP_INT_MAX', \PHP_INT_MAX],
- ['[!php/const PHP_INT_MAX]', [\PHP_INT_MAX]],
- ['{ foo: !php/const PHP_INT_MAX }', ['foo' => \PHP_INT_MAX]],
- ['{ !php/const PHP_INT_MAX: foo }', [\PHP_INT_MAX => 'foo']],
- ['!php/const NULL', null],
- ];
- }
-
- public function testParsePhpConstantThrowsExceptionWhenUndefined()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('The constant "WRONG_CONSTANT" is not defined');
- Inline::parse('!php/const WRONG_CONSTANT', Yaml::PARSE_CONSTANT);
- }
-
- public function testParsePhpConstantThrowsExceptionOnInvalidType()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessageMatches('#The string "!php/const PHP_INT_MAX" could not be parsed as a constant.*#');
- Inline::parse('!php/const PHP_INT_MAX', Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);
- }
-
- /**
- * @group legacy
- * @expectedDeprecation The !php/const: tag to indicate dumped PHP constants is deprecated since Symfony 3.4 and will be removed in 4.0. Use the !php/const (without the colon) tag instead on line 1.
- * @dataProvider getTestsForParseLegacyPhpConstants
- */
- public function testDeprecatedConstantTag($yaml, $expectedValue)
- {
- $this->assertSame($expectedValue, Inline::parse($yaml, Yaml::PARSE_CONSTANT));
- }
-
- public function getTestsForParseLegacyPhpConstants()
- {
- return [
- ['!php/const:Symfony\Component\Yaml\Yaml::PARSE_CONSTANT', Yaml::PARSE_CONSTANT],
- ['!php/const:PHP_INT_MAX', \PHP_INT_MAX],
- ['[!php/const:PHP_INT_MAX]', [\PHP_INT_MAX]],
- ['{ foo: !php/const:PHP_INT_MAX }', ['foo' => \PHP_INT_MAX]],
- ['{ !php/const:PHP_INT_MAX: foo }', [\PHP_INT_MAX => 'foo']],
- ['!php/const:NULL', null],
- ];
- }
-
- /**
- * @group legacy
- * @dataProvider getTestsForParseWithMapObjects
- */
- public function testParseWithMapObjectsPassingTrue($yaml, $value)
- {
- $actual = Inline::parse($yaml, false, false, true);
-
- $this->assertSame(serialize($value), serialize($actual));
- }
-
- /**
- * @dataProvider getTestsForDump
- */
- public function testDump($yaml, $value, $parseFlags = 0)
- {
- $this->assertEquals($yaml, Inline::dump($value), sprintf('::dump() converts a PHP structure to an inline YAML (%s)', $yaml));
-
- $this->assertSame($value, Inline::parse(Inline::dump($value), $parseFlags), 'check consistency');
- }
-
- public function testDumpNumericValueWithLocale()
- {
- $locale = setlocale(\LC_NUMERIC, 0);
- if (false === $locale) {
- $this->markTestSkipped('Your platform does not support locales.');
- }
-
- try {
- $requiredLocales = ['fr_FR.UTF-8', 'fr_FR.UTF8', 'fr_FR.utf-8', 'fr_FR.utf8', 'French_France.1252'];
- if (false === setlocale(\LC_NUMERIC, $requiredLocales)) {
- $this->markTestSkipped('Could not set any of required locales: '.implode(', ', $requiredLocales));
- }
-
- $this->assertEquals('1.2', Inline::dump(1.2));
- $this->assertStringContainsStringIgnoringCase('fr', setlocale(\LC_NUMERIC, 0));
- } finally {
- setlocale(\LC_NUMERIC, $locale);
- }
- }
-
- public function testHashStringsResemblingExponentialNumericsShouldNotBeChangedToINF()
- {
- $value = '686e444';
-
- $this->assertSame($value, Inline::parse(Inline::dump($value)));
- }
-
- public function testParseScalarWithNonEscapedBlackslashShouldThrowException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('Found unknown escape character "\V".');
- Inline::parse('"Foo\Var"');
- }
-
- public function testParseScalarWithNonEscapedBlackslashAtTheEndShouldThrowException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- Inline::parse('"Foo\\"');
- }
-
- public function testParseScalarWithIncorrectlyQuotedStringShouldThrowException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $value = "'don't do somthin' like that'";
- Inline::parse($value);
- }
-
- public function testParseScalarWithIncorrectlyDoubleQuotedStringShouldThrowException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $value = '"don"t do somthin" like that"';
- Inline::parse($value);
- }
-
- public function testParseInvalidMappingKeyShouldThrowException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $value = '{ "foo " bar": "bar" }';
- Inline::parse($value);
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Using a colon after an unquoted mapping key that is not followed by an indication character (i.e. " ", ",", "[", "]", "{", "}") is deprecated since Symfony 3.2 and will throw a ParseException in 4.0 on line 1.
- * throws \Symfony\Component\Yaml\Exception\ParseException in 4.0
- */
- public function testParseMappingKeyWithColonNotFollowedBySpace()
- {
- Inline::parse('{1:""}');
- }
-
- public function testParseInvalidMappingShouldThrowException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- Inline::parse('[foo] bar');
- }
-
- public function testParseInvalidSequenceShouldThrowException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- Inline::parse('{ foo: bar } bar');
- }
-
- public function testParseInvalidTaggedSequenceShouldThrowException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- Inline::parse('!foo { bar: baz } qux', Yaml::PARSE_CUSTOM_TAGS);
- }
-
- public function testParseScalarWithCorrectlyQuotedStringShouldReturnString()
- {
- $value = "'don''t do somthin'' like that'";
- $expect = "don't do somthin' like that";
-
- $this->assertSame($expect, Inline::parseScalar($value));
- }
-
- /**
- * @dataProvider getDataForParseReferences
- */
- public function testParseReferences($yaml, $expected)
- {
- $this->assertSame($expected, Inline::parse($yaml, 0, ['var' => 'var-value']));
- }
-
- /**
- * @group legacy
- * @dataProvider getDataForParseReferences
- */
- public function testParseReferencesAsFifthArgument($yaml, $expected)
- {
- $this->assertSame($expected, Inline::parse($yaml, false, false, false, ['var' => 'var-value']));
- }
-
- public function getDataForParseReferences()
- {
- return [
- 'scalar' => ['*var', 'var-value'],
- 'list' => ['[ *var ]', ['var-value']],
- 'list-in-list' => ['[[ *var ]]', [['var-value']]],
- 'map-in-list' => ['[ { key: *var } ]', [['key' => 'var-value']]],
- 'embedded-mapping-in-list' => ['[ key: *var ]', [['key' => 'var-value']]],
- 'map' => ['{ key: *var }', ['key' => 'var-value']],
- 'list-in-map' => ['{ key: [*var] }', ['key' => ['var-value']]],
- 'map-in-map' => ['{ foo: { bar: *var } }', ['foo' => ['bar' => 'var-value']]],
- ];
- }
-
- public function testParseMapReferenceInSequence()
- {
- $foo = [
- 'a' => 'Steve',
- 'b' => 'Clark',
- 'c' => 'Brian',
- ];
- $this->assertSame([$foo], Inline::parse('[*foo]', 0, ['foo' => $foo]));
- }
-
- /**
- * @group legacy
- */
- public function testParseMapReferenceInSequenceAsFifthArgument()
- {
- $foo = [
- 'a' => 'Steve',
- 'b' => 'Clark',
- 'c' => 'Brian',
- ];
- $this->assertSame([$foo], Inline::parse('[*foo]', false, false, false, ['foo' => $foo]));
- }
-
- public function testParseUnquotedAsterisk()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('A reference must contain at least one character at line 1.');
- Inline::parse('{ foo: * }');
- }
-
- public function testParseUnquotedAsteriskFollowedByAComment()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('A reference must contain at least one character at line 1.');
- Inline::parse('{ foo: * #foo }');
- }
-
- /**
- * @dataProvider getReservedIndicators
- */
- public function testParseUnquotedScalarStartingWithReservedIndicator($indicator)
- {
- $this->expectException(ParseException::class);
- $this->expectExceptionMessage(sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo ").', $indicator));
-
- Inline::parse(sprintf('{ foo: %sfoo }', $indicator));
- }
-
- public function getReservedIndicators()
- {
- return [['@'], ['`']];
- }
-
- /**
- * @dataProvider getScalarIndicators
- */
- public function testParseUnquotedScalarStartingWithScalarIndicator($indicator)
- {
- $this->expectException(ParseException::class);
- $this->expectExceptionMessage(sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo ").', $indicator));
-
- Inline::parse(sprintf('{ foo: %sfoo }', $indicator));
- }
-
- public function getScalarIndicators()
- {
- return [['|'], ['>']];
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Not quoting the scalar "%bar " starting with the "%" indicator character is deprecated since Symfony 3.1 and will throw a ParseException in 4.0 on line 1.
- * throws \Symfony\Component\Yaml\Exception\ParseException in 4.0
- */
- public function testParseUnquotedScalarStartingWithPercentCharacter()
- {
- Inline::parse('{ foo: %bar }');
- }
-
- /**
- * @dataProvider getDataForIsHash
- */
- public function testIsHash($array, $expected)
- {
- $this->assertSame($expected, Inline::isHash($array));
- }
-
- public function getDataForIsHash()
- {
- return [
- [[], false],
- [[1, 2, 3], false],
- [[2 => 1, 1 => 2, 0 => 3], true],
- [['foo' => 1, 'bar' => 2], true],
- ];
- }
-
- public function getTestsForParse()
- {
- return [
- ['', ''],
- ['null', null],
- ['false', false],
- ['true', true],
- ['12', 12],
- ['-12', -12],
- ['1_2', 12],
- ['_12', '_12'],
- ['12_', 12],
- ['"quoted string"', 'quoted string'],
- ["'quoted string'", 'quoted string'],
- ['12.30e+02', 12.30e+02],
- ['123.45_67', 123.4567],
- ['0x4D2', 0x4D2],
- ['0x_4_D_2_', 0x4D2],
- ['02333', 02333],
- ['0_2_3_3_3', 02333],
- ['.Inf', -log(0)],
- ['-.Inf', log(0)],
- ["'686e444'", '686e444'],
- ['686e444', 646e444],
- ['123456789123456789123456789123456789', '123456789123456789123456789123456789'],
- ['"foo\r\nbar"', "foo\r\nbar"],
- ["'foo#bar'", 'foo#bar'],
- ["'foo # bar'", 'foo # bar'],
- ["'#cfcfcf'", '#cfcfcf'],
- ['::form_base.html.twig', '::form_base.html.twig'],
-
- // Pre-YAML-1.2 booleans
- ["'y'", 'y'],
- ["'n'", 'n'],
- ["'yes'", 'yes'],
- ["'no'", 'no'],
- ["'on'", 'on'],
- ["'off'", 'off'],
-
- ['2007-10-30', gmmktime(0, 0, 0, 10, 30, 2007)],
- ['2007-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 2007)],
- ['2007-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 2007)],
- ['1960-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 1960)],
- ['1730-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 1730)],
-
- ['"a \\"string\\" with \'quoted strings inside\'"', 'a "string" with \'quoted strings inside\''],
- ["'a \"string\" with ''quoted strings inside'''", 'a "string" with \'quoted strings inside\''],
-
- // sequences
- // urls are no key value mapping. see #3609. Valid yaml "key: value" mappings require a space after the colon
- ['[foo, http://urls.are/no/mappings, false, null, 12]', ['foo', 'http://urls.are/no/mappings', false, null, 12]],
- ['[ foo , bar , false , null , 12 ]', ['foo', 'bar', false, null, 12]],
- ['[\'foo,bar\', \'foo bar\']', ['foo,bar', 'foo bar']],
-
- // mappings
- ['{foo: bar,bar: foo,"false": false, "null": null,integer: 12}', ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12]],
- ['{ foo : bar, bar : foo, "false" : false, "null" : null, integer : 12 }', ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12]],
- ['{foo: \'bar\', bar: \'foo: bar\'}', ['foo' => 'bar', 'bar' => 'foo: bar']],
- ['{\'foo\': \'bar\', "bar": \'foo: bar\'}', ['foo' => 'bar', 'bar' => 'foo: bar']],
- ['{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', ['foo\'' => 'bar', 'bar"' => 'foo: bar']],
- ['{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', ['foo: ' => 'bar', 'bar: ' => 'foo: bar']],
- ['{"foo:bar": "baz"}', ['foo:bar' => 'baz']],
- ['{"foo":"bar"}', ['foo' => 'bar']],
-
- // nested sequences and mappings
- ['[foo, [bar, foo]]', ['foo', ['bar', 'foo']]],
- ['[foo, {bar: foo}]', ['foo', ['bar' => 'foo']]],
- ['{ foo: {bar: foo} }', ['foo' => ['bar' => 'foo']]],
- ['{ foo: [bar, foo] }', ['foo' => ['bar', 'foo']]],
- ['{ foo:{bar: foo} }', ['foo' => ['bar' => 'foo']]],
- ['{ foo:[bar, foo] }', ['foo' => ['bar', 'foo']]],
-
- ['[ foo, [ bar, foo ] ]', ['foo', ['bar', 'foo']]],
-
- ['[{ foo: {bar: foo} }]', [['foo' => ['bar' => 'foo']]]],
-
- ['[foo, [bar, [foo, [bar, foo]], foo]]', ['foo', ['bar', ['foo', ['bar', 'foo']], 'foo']]],
-
- ['[foo, {bar: foo, foo: [foo, {bar: foo}]}, [foo, {bar: foo}]]', ['foo', ['bar' => 'foo', 'foo' => ['foo', ['bar' => 'foo']]], ['foo', ['bar' => 'foo']]]],
-
- ['[foo, bar: { foo: bar }]', ['foo', '1' => ['bar' => ['foo' => 'bar']]]],
- ['[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']', ['foo', '@foo.baz', ['%foo%' => 'foo is %foo%', 'bar' => '%foo%'], true, '@service_container']],
- ];
- }
-
- public function getTestsForParseWithMapObjects()
- {
- return [
- ['', ''],
- ['null', null],
- ['false', false],
- ['true', true],
- ['12', 12],
- ['-12', -12],
- ['"quoted string"', 'quoted string'],
- ["'quoted string'", 'quoted string'],
- ['12.30e+02', 12.30e+02],
- ['0x4D2', 0x4D2],
- ['02333', 02333],
- ['.Inf', -log(0)],
- ['-.Inf', log(0)],
- ["'686e444'", '686e444'],
- ['686e444', 646e444],
- ['123456789123456789123456789123456789', '123456789123456789123456789123456789'],
- ['"foo\r\nbar"', "foo\r\nbar"],
- ["'foo#bar'", 'foo#bar'],
- ["'foo # bar'", 'foo # bar'],
- ["'#cfcfcf'", '#cfcfcf'],
- ['::form_base.html.twig', '::form_base.html.twig'],
-
- ['2007-10-30', gmmktime(0, 0, 0, 10, 30, 2007)],
- ['2007-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 2007)],
- ['2007-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 2007)],
- ['1960-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 1960)],
- ['1730-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 1730)],
-
- ['"a \\"string\\" with \'quoted strings inside\'"', 'a "string" with \'quoted strings inside\''],
- ["'a \"string\" with ''quoted strings inside'''", 'a "string" with \'quoted strings inside\''],
-
- // sequences
- // urls are no key value mapping. see #3609. Valid yaml "key: value" mappings require a space after the colon
- ['[foo, http://urls.are/no/mappings, false, null, 12]', ['foo', 'http://urls.are/no/mappings', false, null, 12]],
- ['[ foo , bar , false , null , 12 ]', ['foo', 'bar', false, null, 12]],
- ['[\'foo,bar\', \'foo bar\']', ['foo,bar', 'foo bar']],
-
- // mappings
- ['{foo: bar,bar: foo,"false": false,"null": null,integer: 12}', (object) ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12], Yaml::PARSE_OBJECT_FOR_MAP],
- ['{ foo : bar, bar : foo, "false" : false, "null" : null, integer : 12 }', (object) ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12], Yaml::PARSE_OBJECT_FOR_MAP],
- ['{foo: \'bar\', bar: \'foo: bar\'}', (object) ['foo' => 'bar', 'bar' => 'foo: bar']],
- ['{\'foo\': \'bar\', "bar": \'foo: bar\'}', (object) ['foo' => 'bar', 'bar' => 'foo: bar']],
- ['{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', (object) ['foo\'' => 'bar', 'bar"' => 'foo: bar']],
- ['{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', (object) ['foo: ' => 'bar', 'bar: ' => 'foo: bar']],
- ['{"foo:bar": "baz"}', (object) ['foo:bar' => 'baz']],
- ['{"foo":"bar"}', (object) ['foo' => 'bar']],
-
- // nested sequences and mappings
- ['[foo, [bar, foo]]', ['foo', ['bar', 'foo']]],
- ['[foo, {bar: foo}]', ['foo', (object) ['bar' => 'foo']]],
- ['{ foo: {bar: foo} }', (object) ['foo' => (object) ['bar' => 'foo']]],
- ['{ foo: [bar, foo] }', (object) ['foo' => ['bar', 'foo']]],
-
- ['[ foo, [ bar, foo ] ]', ['foo', ['bar', 'foo']]],
-
- ['[{ foo: {bar: foo} }]', [(object) ['foo' => (object) ['bar' => 'foo']]]],
-
- ['[foo, [bar, [foo, [bar, foo]], foo]]', ['foo', ['bar', ['foo', ['bar', 'foo']], 'foo']]],
-
- ['[foo, {bar: foo, foo: [foo, {bar: foo}]}, [foo, {bar: foo}]]', ['foo', (object) ['bar' => 'foo', 'foo' => ['foo', (object) ['bar' => 'foo']]], ['foo', (object) ['bar' => 'foo']]]],
-
- ['[foo, bar: { foo: bar }]', ['foo', '1' => (object) ['bar' => (object) ['foo' => 'bar']]]],
- ['[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']', ['foo', '@foo.baz', (object) ['%foo%' => 'foo is %foo%', 'bar' => '%foo%'], true, '@service_container']],
-
- ['{}', new \stdClass()],
- ['{ foo : bar, bar : {} }', (object) ['foo' => 'bar', 'bar' => new \stdClass()]],
- ['{ foo : [], bar : {} }', (object) ['foo' => [], 'bar' => new \stdClass()]],
- ['{foo: \'bar\', bar: {} }', (object) ['foo' => 'bar', 'bar' => new \stdClass()]],
- ['{\'foo\': \'bar\', "bar": {}}', (object) ['foo' => 'bar', 'bar' => new \stdClass()]],
- ['{\'foo\': \'bar\', "bar": \'{}\'}', (object) ['foo' => 'bar', 'bar' => '{}']],
-
- ['[foo, [{}, {}]]', ['foo', [new \stdClass(), new \stdClass()]]],
- ['[foo, [[], {}]]', ['foo', [[], new \stdClass()]]],
- ['[foo, [[{}, {}], {}]]', ['foo', [[new \stdClass(), new \stdClass()], new \stdClass()]]],
- ['[foo, {bar: {}}]', ['foo', '1' => (object) ['bar' => new \stdClass()]]],
- ];
- }
-
- public function getTestsForDump()
- {
- return [
- ['null', null],
- ['false', false],
- ['true', true],
- ['12', 12],
- ["'1_2'", '1_2'],
- ['_12', '_12'],
- ["'12_'", '12_'],
- ["'quoted string'", 'quoted string'],
- ['!!float 1230', 12.30e+02],
- ['1234', 0x4D2],
- ['1243', 02333],
- ["'0x_4_D_2_'", '0x_4_D_2_'],
- ["'0_2_3_3_3'", '0_2_3_3_3'],
- ['.Inf', -log(0)],
- ['-.Inf', log(0)],
- ["'686e444'", '686e444'],
- ['"foo\r\nbar"', "foo\r\nbar"],
- ["'foo#bar'", 'foo#bar'],
- ["'foo # bar'", 'foo # bar'],
- ["'#cfcfcf'", '#cfcfcf'],
-
- ["'a \"string\" with ''quoted strings inside'''", 'a "string" with \'quoted strings inside\''],
-
- ["'-dash'", '-dash'],
- ["'-'", '-'],
-
- // Pre-YAML-1.2 booleans
- ["'y'", 'y'],
- ["'n'", 'n'],
- ["'yes'", 'yes'],
- ["'no'", 'no'],
- ["'on'", 'on'],
- ["'off'", 'off'],
-
- // sequences
- ['[foo, bar, false, null, 12]', ['foo', 'bar', false, null, 12]],
- ['[\'foo,bar\', \'foo bar\']', ['foo,bar', 'foo bar']],
-
- // mappings
- ['{ foo: bar, bar: foo, \'false\': false, \'null\': null, integer: 12 }', ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12]],
- ['{ foo: bar, bar: \'foo: bar\' }', ['foo' => 'bar', 'bar' => 'foo: bar']],
-
- // nested sequences and mappings
- ['[foo, [bar, foo]]', ['foo', ['bar', 'foo']]],
-
- ['[foo, [bar, [foo, [bar, foo]], foo]]', ['foo', ['bar', ['foo', ['bar', 'foo']], 'foo']]],
-
- ['{ foo: { bar: foo } }', ['foo' => ['bar' => 'foo']]],
-
- ['[foo, { bar: foo }]', ['foo', ['bar' => 'foo']]],
-
- ['[foo, { bar: foo, foo: [foo, { bar: foo }] }, [foo, { bar: foo }]]', ['foo', ['bar' => 'foo', 'foo' => ['foo', ['bar' => 'foo']]], ['foo', ['bar' => 'foo']]]],
-
- ['[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']', ['foo', '@foo.baz', ['%foo%' => 'foo is %foo%', 'bar' => '%foo%'], true, '@service_container']],
-
- ['{ foo: { bar: { 1: 2, baz: 3 } } }', ['foo' => ['bar' => [1 => 2, 'baz' => 3]]]],
-
- // numeric strings with trailing whitespaces
- ["'0123 '", '0123 '],
- ['"0123\f"', "0123\f"],
- ['"0123\n"', "0123\n"],
- ['"0123\r"', "0123\r"],
- ['"0123\t"', "0123\t"],
- ['"0123\v"', "0123\v"],
- ];
- }
-
- /**
- * @dataProvider getTimestampTests
- */
- public function testParseTimestampAsUnixTimestampByDefault($yaml, $year, $month, $day, $hour, $minute, $second)
- {
- $this->assertSame(gmmktime($hour, $minute, $second, $month, $day, $year), Inline::parse($yaml));
- }
-
- /**
- * @dataProvider getTimestampTests
- */
- public function testParseTimestampAsDateTimeObject($yaml, $year, $month, $day, $hour, $minute, $second, $timezone)
- {
- $expected = new \DateTime($yaml);
- $expected->setTimeZone(new \DateTimeZone('UTC'));
- $expected->setDate($year, $month, $day);
-
- if (\PHP_VERSION_ID >= 70100) {
- $expected->setTime($hour, $minute, $second, 1000000 * ($second - (int) $second));
- } else {
- $expected->setTime($hour, $minute, $second);
- }
-
- $date = Inline::parse($yaml, Yaml::PARSE_DATETIME);
- $this->assertEquals($expected, $date);
- $this->assertSame($timezone, $date->format('O'));
- }
-
- public function getTimestampTests()
- {
- return [
- 'canonical' => ['2001-12-15T02:59:43.1Z', 2001, 12, 15, 2, 59, 43.1, '+0000'],
- 'ISO-8601' => ['2001-12-15t21:59:43.10-05:00', 2001, 12, 16, 2, 59, 43.1, '-0500'],
- 'spaced' => ['2001-12-15 21:59:43.10 -5', 2001, 12, 16, 2, 59, 43.1, '-0500'],
- 'date' => ['2001-12-15', 2001, 12, 15, 0, 0, 0, '+0000'],
- ];
- }
-
- /**
- * @dataProvider getTimestampTests
- */
- public function testParseNestedTimestampListAsDateTimeObject($yaml, $year, $month, $day, $hour, $minute, $second)
- {
- $expected = new \DateTime($yaml);
- $expected->setTimeZone(new \DateTimeZone('UTC'));
- $expected->setDate($year, $month, $day);
- if (\PHP_VERSION_ID >= 70100) {
- $expected->setTime($hour, $minute, $second, 1000000 * ($second - (int) $second));
- } else {
- $expected->setTime($hour, $minute, $second);
- }
-
- $expectedNested = ['nested' => [$expected]];
- $yamlNested = "{nested: [$yaml]}";
-
- $this->assertEquals($expectedNested, Inline::parse($yamlNested, Yaml::PARSE_DATETIME));
- }
-
- /**
- * @dataProvider getDateTimeDumpTests
- */
- public function testDumpDateTime($dateTime, $expected)
- {
- $this->assertSame($expected, Inline::dump($dateTime));
- }
-
- public function getDateTimeDumpTests()
- {
- $tests = [];
-
- $dateTime = new \DateTime('2001-12-15 21:59:43', new \DateTimeZone('UTC'));
- $tests['date-time-utc'] = [$dateTime, '2001-12-15T21:59:43+00:00'];
-
- $dateTime = new \DateTimeImmutable('2001-07-15 21:59:43', new \DateTimeZone('Europe/Berlin'));
- $tests['immutable-date-time-europe-berlin'] = [$dateTime, '2001-07-15T21:59:43+02:00'];
-
- return $tests;
- }
-
- /**
- * @dataProvider getBinaryData
- */
- public function testParseBinaryData($data)
- {
- $this->assertSame('Hello world', Inline::parse($data));
- }
-
- public function getBinaryData()
- {
- return [
- 'enclosed with double quotes' => ['!!binary "SGVsbG8gd29ybGQ="'],
- 'enclosed with single quotes' => ["!!binary 'SGVsbG8gd29ybGQ='"],
- 'containing spaces' => ['!!binary "SGVs bG8gd 29ybGQ="'],
- ];
- }
-
- /**
- * @dataProvider getInvalidBinaryData
- */
- public function testParseInvalidBinaryData($data, $expectedMessage)
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessageMatches($expectedMessage);
-
- Inline::parse($data);
- }
-
- public function getInvalidBinaryData()
- {
- return [
- 'length not a multiple of four' => ['!!binary "SGVsbG8d29ybGQ="', '/The normalized base64 encoded data \(data without whitespace characters\) length must be a multiple of four \(\d+ bytes given\)/'],
- 'invalid characters' => ['!!binary "SGVsbG8#d29ybGQ="', '/The base64 encoded data \(.*\) contains invalid characters/'],
- 'too many equals characters' => ['!!binary "SGVsbG8gd29yb==="', '/The base64 encoded data \(.*\) contains invalid characters/'],
- 'misplaced equals character' => ['!!binary "SGVsbG8gd29ybG=Q"', '/The base64 encoded data \(.*\) contains invalid characters/'],
- ];
- }
-
- public function testNotSupportedMissingValue()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('Malformed inline YAML string: "{this, is not, supported}" at line 1.');
- Inline::parse('{this, is not, supported}');
- }
-
- public function testVeryLongQuotedStrings()
- {
- $longStringWithQuotes = str_repeat("x\r\n\\\"x\"x", 1000);
-
- $yamlString = Inline::dump(['longStringWithQuotes' => $longStringWithQuotes]);
- $arrayFromYaml = Inline::parse($yamlString);
-
- $this->assertEquals($longStringWithQuotes, $arrayFromYaml['longStringWithQuotes']);
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Omitting the key of a mapping is deprecated and will throw a ParseException in 4.0 on line 1.
- */
- public function testOmittedMappingKeyIsParsedAsColon()
- {
- $this->assertSame([':' => 'foo'], Inline::parse('{: foo}'));
- }
-
- /**
- * @dataProvider getTestsForNullValues
- */
- public function testParseMissingMappingValueAsNull($yaml, $expected)
- {
- $this->assertSame($expected, Inline::parse($yaml));
- }
-
- public function getTestsForNullValues()
- {
- return [
- 'null before closing curly brace' => ['{foo:}', ['foo' => null]],
- 'null before comma' => ['{foo:, bar: baz}', ['foo' => null, 'bar' => 'baz']],
- ];
- }
-
- public function testTheEmptyStringIsAValidMappingKey()
- {
- $this->assertSame(['' => 'foo'], Inline::parse('{ "": foo }'));
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Implicit casting of incompatible mapping keys to strings is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0. Quote your evaluable mapping keys instead on line 1.
- * @dataProvider getNotPhpCompatibleMappingKeyData
- */
- public function testImplicitStringCastingOfMappingKeysIsDeprecated($yaml, $expected)
- {
- $this->assertSame($expected, Inline::parse($yaml));
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Using the Yaml::PARSE_KEYS_AS_STRINGS flag is deprecated since Symfony 3.4 as it will be removed in 4.0. Quote your keys when they are evaluable instead.
- * @expectedDeprecation Implicit casting of incompatible mapping keys to strings is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0. Quote your evaluable mapping keys instead on line 1.
- * @dataProvider getNotPhpCompatibleMappingKeyData
- */
- public function testExplicitStringCastingOfMappingKeys($yaml, $expected)
- {
- $this->assertSame($expected, Yaml::parse($yaml, Yaml::PARSE_KEYS_AS_STRINGS));
- }
-
- public function getNotPhpCompatibleMappingKeyData()
- {
- return [
- 'boolean-true' => ['{true: "foo"}', ['true' => 'foo']],
- 'boolean-false' => ['{false: "foo"}', ['false' => 'foo']],
- 'null' => ['{null: "foo"}', ['null' => 'foo']],
- 'float' => ['{0.25: "foo"}', ['0.25' => 'foo']],
- ];
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Support for the !str tag is deprecated since Symfony 3.4. Use the !!str tag instead on line 1.
- */
- public function testDeprecatedStrTag()
- {
- $this->assertSame(['foo' => 'bar'], Inline::parse('{ foo: !str bar }'));
- }
-
- public function testUnfinishedInlineMap()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('Unexpected end of line, expected one of ",}" at line 1 (near "{abc: \'def\'").');
- Inline::parse("{abc: 'def'");
- }
-
- /**
- * @dataProvider getTestsForOctalNumbers
- */
- public function testParseOctalNumbers($expected, $yaml)
- {
- self::assertSame($expected, Inline::parse($yaml));
- }
-
- public function getTestsForOctalNumbers()
- {
- return [
- 'positive octal number' => [28, '034'],
- 'negative octal number' => [-28, '-034'],
- ];
- }
-
- /**
- * @dataProvider phpObjectTagWithEmptyValueProvider
- */
- public function testPhpObjectWithEmptyValue($expected, $value)
- {
- $this->assertSame($expected, Inline::parse($value, Yaml::PARSE_OBJECT));
- }
-
- public function phpObjectTagWithEmptyValueProvider()
- {
- return [
- [false, '!php/object'],
- [false, '!php/object '],
- [false, '!php/object '],
- [[false], '[!php/object]'],
- [[false], '[!php/object ]'],
- [[false, 'foo'], '[!php/object , foo]'],
- ];
- }
-
- /**
- * @dataProvider phpConstTagWithEmptyValueProvider
- */
- public function testPhpConstTagWithEmptyValue($expected, $value)
- {
- $this->assertSame($expected, Inline::parse($value, Yaml::PARSE_CONSTANT));
- }
-
- public function phpConstTagWithEmptyValueProvider()
- {
- return [
- ['', '!php/const'],
- ['', '!php/const '],
- ['', '!php/const '],
- [[''], '[!php/const]'],
- [[''], '[!php/const ]'],
- [['', 'foo'], '[!php/const , foo]'],
- [['' => 'foo'], '{!php/const: foo}'],
- [['' => 'foo'], '{!php/const : foo}'],
- [['' => 'foo', 'bar' => 'ccc'], '{!php/const : foo, bar: ccc}'],
- ];
- }
-
- public function testParsePositiveOctalNumberContainingInvalidDigits()
- {
- self::assertSame('0123456789', Inline::parse('0123456789'));
- }
-
- public function testParseNegativeOctalNumberContainingInvalidDigits()
- {
- self::assertSame('-0123456789', Inline::parse('-0123456789'));
- }
-
- public function testParseCommentNotPrefixedBySpaces()
- {
- self::assertSame('foo', Inline::parse('"foo"#comment'));
- }
-
- public function testParseUnquotedStringContainingHashTagNotPrefixedBySpace()
- {
- self::assertSame('foo#nocomment', Inline::parse('foo#nocomment'));
- }
-}
diff --git a/vendor/symfony/yaml/Tests/ParseExceptionTest.php b/vendor/symfony/yaml/Tests/ParseExceptionTest.php
deleted file mode 100644
index 39579ede..00000000
--- a/vendor/symfony/yaml/Tests/ParseExceptionTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Yaml\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Yaml\Exception\ParseException;
-
-class ParseExceptionTest extends TestCase
-{
- public function testGetMessage()
- {
- $exception = new ParseException('Error message', 42, 'foo: bar', '/var/www/app/config.yml');
- $message = 'Error message in "/var/www/app/config.yml" at line 42 (near "foo: bar")';
-
- $this->assertEquals($message, $exception->getMessage());
- }
-
- public function testGetMessageWithUnicodeInFilename()
- {
- $exception = new ParseException('Error message', 42, 'foo: bar', 'äöü.yml');
- $message = 'Error message in "äöü.yml" at line 42 (near "foo: bar")';
-
- $this->assertEquals($message, $exception->getMessage());
- }
-}
diff --git a/vendor/symfony/yaml/Tests/ParserTest.php b/vendor/symfony/yaml/Tests/ParserTest.php
deleted file mode 100644
index 7fa6ed1a..00000000
--- a/vendor/symfony/yaml/Tests/ParserTest.php
+++ /dev/null
@@ -1,2401 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Yaml\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Yaml\Parser;
-use Symfony\Component\Yaml\Tag\TaggedValue;
-use Symfony\Component\Yaml\Yaml;
-
-class ParserTest extends TestCase
-{
- /** @var Parser */
- protected $parser;
-
- protected function setUp()
- {
- $this->parser = new Parser();
- }
-
- protected function tearDown()
- {
- $this->parser = null;
-
- chmod(__DIR__.'/Fixtures/not_readable.yml', 0644);
- }
-
- /**
- * @dataProvider getDataFormSpecifications
- */
- public function testSpecifications($expected, $yaml, $comment, $deprecated)
- {
- $deprecations = [];
-
- if ($deprecated) {
- set_error_handler(function ($type, $msg) use (&$deprecations) {
- if (\E_USER_DEPRECATED !== $type) {
- restore_error_handler();
-
- return \call_user_func_array('PHPUnit\Util\ErrorHandler::handleError', \func_get_args());
- }
-
- $deprecations[] = $msg;
-
- return null;
- });
- }
-
- $this->assertEquals($expected, var_export($this->parser->parse($yaml), true), $comment);
-
- if ($deprecated) {
- restore_error_handler();
-
- $this->assertCount(1, $deprecations);
- $this->assertStringContainsString(true !== $deprecated ? $deprecated : 'Using the comma as a group separator for floats is deprecated since Symfony 3.2 and will be removed in 4.0 on line 1.', $deprecations[0]);
- }
- }
-
- public function getDataFormSpecifications()
- {
- return $this->loadTestsFromFixtureFiles('index.yml');
- }
-
- /**
- * @group legacy
- * @expectedDeprecationMessage Using the Yaml::PARSE_KEYS_AS_STRINGS flag is deprecated since Symfony 3.4 as it will be removed in 4.0. Quote your keys when they are evaluable
- * @dataProvider getNonStringMappingKeysData
- */
- public function testNonStringMappingKeys($expected, $yaml, $comment)
- {
- $this->assertSame($expected, var_export($this->parser->parse($yaml, Yaml::PARSE_KEYS_AS_STRINGS), true), $comment);
- }
-
- public function getNonStringMappingKeysData()
- {
- return $this->loadTestsFromFixtureFiles('nonStringKeys.yml');
- }
-
- /**
- * @group legacy
- * @dataProvider getLegacyNonStringMappingKeysData
- */
- public function testLegacyNonStringMappingKeys($expected, $yaml, $comment)
- {
- $this->assertSame($expected, var_export($this->parser->parse($yaml), true), $comment);
- }
-
- public function getLegacyNonStringMappingKeysData()
- {
- return $this->loadTestsFromFixtureFiles('legacyNonStringKeys.yml');
- }
-
- public function testTabsInYaml()
- {
- // test tabs in YAML
- $yamls = [
- "foo:\n bar",
- "foo:\n bar",
- "foo:\n bar",
- "foo:\n bar",
- ];
-
- foreach ($yamls as $yaml) {
- try {
- $this->parser->parse($yaml);
-
- $this->fail('YAML files must not contain tabs');
- } catch (\Exception $e) {
- $this->assertInstanceOf('\Exception', $e, 'YAML files must not contain tabs');
- $this->assertEquals('A YAML file cannot contain tabs as indentation at line 2 (near "'.strpbrk($yaml, "\t").'").', $e->getMessage(), 'YAML files must not contain tabs');
- }
- }
- }
-
- public function testEndOfTheDocumentMarker()
- {
- $yaml = <<<'EOF'
---- %YAML:1.0
-foo
-...
-EOF;
-
- $this->assertEquals('foo', $this->parser->parse($yaml));
- }
-
- public function getBlockChompingTests()
- {
- $tests = [];
-
- $yaml = <<<'EOF'
-foo: |-
- one
- two
-bar: |-
- one
- two
-
-EOF;
- $expected = [
- 'foo' => "one\ntwo",
- 'bar' => "one\ntwo",
- ];
- $tests['Literal block chomping strip with single trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: |-
- one
- two
-
-bar: |-
- one
- two
-
-
-EOF;
- $expected = [
- 'foo' => "one\ntwo",
- 'bar' => "one\ntwo",
- ];
- $tests['Literal block chomping strip with multiple trailing newlines'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-{}
-
-
-EOF;
- $expected = [];
- $tests['Literal block chomping strip with multiple trailing newlines after a 1-liner'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: |-
- one
- two
-bar: |-
- one
- two
-EOF;
- $expected = [
- 'foo' => "one\ntwo",
- 'bar' => "one\ntwo",
- ];
- $tests['Literal block chomping strip without trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: |
- one
- two
-bar: |
- one
- two
-
-EOF;
- $expected = [
- 'foo' => "one\ntwo\n",
- 'bar' => "one\ntwo\n",
- ];
- $tests['Literal block chomping clip with single trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: |
- one
- two
-
-bar: |
- one
- two
-
-
-EOF;
- $expected = [
- 'foo' => "one\ntwo\n",
- 'bar' => "one\ntwo\n",
- ];
- $tests['Literal block chomping clip with multiple trailing newlines'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo:
-- bar: |
- one
-
- two
-EOF;
- $expected = [
- 'foo' => [
- [
- 'bar' => "one\n\ntwo",
- ],
- ],
- ];
- $tests['Literal block chomping clip with embedded blank line inside unindented collection'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: |
- one
- two
-bar: |
- one
- two
-EOF;
- $expected = [
- 'foo' => "one\ntwo\n",
- 'bar' => "one\ntwo",
- ];
- $tests['Literal block chomping clip without trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: |+
- one
- two
-bar: |+
- one
- two
-
-EOF;
- $expected = [
- 'foo' => "one\ntwo\n",
- 'bar' => "one\ntwo\n",
- ];
- $tests['Literal block chomping keep with single trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: |+
- one
- two
-
-bar: |+
- one
- two
-
-
-EOF;
- $expected = [
- 'foo' => "one\ntwo\n\n",
- 'bar' => "one\ntwo\n\n",
- ];
- $tests['Literal block chomping keep with multiple trailing newlines'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: |+
- one
- two
-bar: |+
- one
- two
-EOF;
- $expected = [
- 'foo' => "one\ntwo\n",
- 'bar' => "one\ntwo",
- ];
- $tests['Literal block chomping keep without trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: >-
- one
- two
-bar: >-
- one
- two
-
-EOF;
- $expected = [
- 'foo' => 'one two',
- 'bar' => 'one two',
- ];
- $tests['Folded block chomping strip with single trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: >-
- one
- two
-
-bar: >-
- one
- two
-
-
-EOF;
- $expected = [
- 'foo' => 'one two',
- 'bar' => 'one two',
- ];
- $tests['Folded block chomping strip with multiple trailing newlines'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: >-
- one
- two
-bar: >-
- one
- two
-EOF;
- $expected = [
- 'foo' => 'one two',
- 'bar' => 'one two',
- ];
- $tests['Folded block chomping strip without trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: >
- one
- two
-bar: >
- one
- two
-
-EOF;
- $expected = [
- 'foo' => "one two\n",
- 'bar' => "one two\n",
- ];
- $tests['Folded block chomping clip with single trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: >
- one
- two
-
-bar: >
- one
- two
-
-
-EOF;
- $expected = [
- 'foo' => "one two\n",
- 'bar' => "one two\n",
- ];
- $tests['Folded block chomping clip with multiple trailing newlines'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: >
- one
- two
-bar: >
- one
- two
-EOF;
- $expected = [
- 'foo' => "one two\n",
- 'bar' => 'one two',
- ];
- $tests['Folded block chomping clip without trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: >+
- one
- two
-bar: >+
- one
- two
-
-EOF;
- $expected = [
- 'foo' => "one two\n",
- 'bar' => "one two\n",
- ];
- $tests['Folded block chomping keep with single trailing newline'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: >+
- one
- two
-
-bar: >+
- one
- two
-
-
-EOF;
- $expected = [
- 'foo' => "one two\n\n",
- 'bar' => "one two\n\n",
- ];
- $tests['Folded block chomping keep with multiple trailing newlines'] = [$expected, $yaml];
-
- $yaml = <<<'EOF'
-foo: >+
- one
- two
-bar: >+
- one
- two
-EOF;
- $expected = [
- 'foo' => "one two\n",
- 'bar' => 'one two',
- ];
- $tests['Folded block chomping keep without trailing newline'] = [$expected, $yaml];
-
- return $tests;
- }
-
- /**
- * @dataProvider getBlockChompingTests
- */
- public function testBlockChomping($expected, $yaml)
- {
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- /**
- * Regression test for issue #7989.
- *
- * @see https://github.com/symfony/symfony/issues/7989
- */
- public function testBlockLiteralWithLeadingNewlines()
- {
- $yaml = <<<'EOF'
-foo: |-
-
-
- bar
-
-EOF;
- $expected = [
- 'foo' => "\n\nbar",
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function testObjectSupportEnabled()
- {
- $input = <<<'EOF'
-foo: !php/object O:30:"Symfony\Component\Yaml\Tests\B":1:{s:1:"b";s:3:"foo";}
-bar: 1
-EOF;
- $this->assertEquals(['foo' => new B(), 'bar' => 1], $this->parser->parse($input, Yaml::PARSE_OBJECT), '->parse() is able to parse objects');
- }
-
- /**
- * @group legacy
- */
- public function testObjectSupportEnabledPassingTrue()
- {
- $input = <<<'EOF'
-foo: !php/object:O:30:"Symfony\Component\Yaml\Tests\B":1:{s:1:"b";s:3:"foo";}
-bar: 1
-EOF;
- $this->assertEquals(['foo' => new B(), 'bar' => 1], $this->parser->parse($input, false, true), '->parse() is able to parse objects');
- }
-
- /**
- * @group legacy
- * @dataProvider deprecatedObjectValueProvider
- */
- public function testObjectSupportEnabledWithDeprecatedTag($yaml)
- {
- $this->assertEquals(['foo' => new B(), 'bar' => 1], $this->parser->parse($yaml, Yaml::PARSE_OBJECT), '->parse() is able to parse objects');
- }
-
- public function deprecatedObjectValueProvider()
- {
- return [
- [
- <<assertEquals(['foo' => null, 'bar' => 1], $this->parser->parse($input), '->parse() does not parse objects');
- }
-
- /**
- * @dataProvider getObjectForMapTests
- */
- public function testObjectForMap($yaml, $expected)
- {
- $flags = Yaml::PARSE_OBJECT_FOR_MAP;
-
- $this->assertEquals($expected, $this->parser->parse($yaml, $flags));
- }
-
- /**
- * @group legacy
- * @dataProvider getObjectForMapTests
- */
- public function testObjectForMapEnabledWithMappingUsingBooleanToggles($yaml, $expected)
- {
- $this->assertEquals($expected, $this->parser->parse($yaml, false, false, true));
- }
-
- public function getObjectForMapTests()
- {
- $tests = [];
-
- $yaml = <<<'EOF'
-foo:
- fiz: [cat]
-EOF;
- $expected = new \stdClass();
- $expected->foo = new \stdClass();
- $expected->foo->fiz = ['cat'];
- $tests['mapping'] = [$yaml, $expected];
-
- $yaml = '{ "foo": "bar", "fiz": "cat" }';
- $expected = new \stdClass();
- $expected->foo = 'bar';
- $expected->fiz = 'cat';
- $tests['inline-mapping'] = [$yaml, $expected];
-
- $yaml = "foo: bar\nbaz: foobar";
- $expected = new \stdClass();
- $expected->foo = 'bar';
- $expected->baz = 'foobar';
- $tests['object-for-map-is-applied-after-parsing'] = [$yaml, $expected];
-
- $yaml = <<<'EOT'
-array:
- - key: one
- - key: two
-EOT;
- $expected = new \stdClass();
- $expected->array = [];
- $expected->array[0] = new \stdClass();
- $expected->array[0]->key = 'one';
- $expected->array[1] = new \stdClass();
- $expected->array[1]->key = 'two';
- $tests['nest-map-and-sequence'] = [$yaml, $expected];
-
- $yaml = <<<'YAML'
-map:
- 1: one
- 2: two
-YAML;
- $expected = new \stdClass();
- $expected->map = new \stdClass();
- $expected->map->{1} = 'one';
- $expected->map->{2} = 'two';
- $tests['numeric-keys'] = [$yaml, $expected];
-
- $yaml = <<<'YAML'
-map:
- '0': one
- '1': two
-YAML;
- $expected = new \stdClass();
- $expected->map = new \stdClass();
- $expected->map->{0} = 'one';
- $expected->map->{1} = 'two';
- $tests['zero-indexed-numeric-keys'] = [$yaml, $expected];
-
- return $tests;
- }
-
- /**
- * @dataProvider invalidDumpedObjectProvider
- */
- public function testObjectsSupportDisabledWithExceptions($yaml)
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->parser->parse($yaml, Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);
- }
-
- public function testCanParseContentWithTrailingSpaces()
- {
- $yaml = "items: \n foo: bar";
-
- $expected = [
- 'items' => ['foo' => 'bar'],
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- /**
- * @group legacy
- * @dataProvider invalidDumpedObjectProvider
- */
- public function testObjectsSupportDisabledWithExceptionsUsingBooleanToggles($yaml)
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->parser->parse($yaml, true);
- }
-
- public function invalidDumpedObjectProvider()
- {
- $yamlTag = <<<'EOF'
-foo: !!php/object:O:30:"Symfony\Tests\Component\Yaml\B":1:{s:1:"b";s:3:"foo";}
-bar: 1
-EOF;
- $localTag = <<<'EOF'
-foo: !php/object:O:30:"Symfony\Tests\Component\Yaml\B":1:{s:1:"b";s:3:"foo";}
-bar: 1
-EOF;
-
- return [
- 'yaml-tag' => [$yamlTag],
- 'local-tag' => [$localTag],
- ];
- }
-
- /**
- * @requires extension iconv
- */
- public function testNonUtf8Exception()
- {
- $yamls = [
- iconv('UTF-8', 'ISO-8859-1', "foo: 'äöüß'"),
- iconv('UTF-8', 'ISO-8859-15', "euro: '€'"),
- iconv('UTF-8', 'CP1252', "cp1252: '©ÉÇáñ'"),
- ];
-
- foreach ($yamls as $yaml) {
- try {
- $this->parser->parse($yaml);
-
- $this->fail('charsets other than UTF-8 are rejected.');
- } catch (\Exception $e) {
- $this->assertInstanceOf('Symfony\Component\Yaml\Exception\ParseException', $e, 'charsets other than UTF-8 are rejected.');
- }
- }
- }
-
- public function testUnindentedCollectionException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $yaml = <<<'EOF'
-
-collection:
--item1
--item2
--item3
-
-EOF;
-
- $this->parser->parse($yaml);
- }
-
- public function testShortcutKeyUnindentedCollectionException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $yaml = <<<'EOF'
-
-collection:
-- key: foo
- foo: bar
-
-EOF;
-
- $this->parser->parse($yaml);
- }
-
- public function testMultipleDocumentsNotSupportedException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessageMatches('/^Multiple documents are not supported.+/');
- Yaml::parse(<<<'EOL'
-# Ranking of 1998 home runs
----
-- Mark McGwire
-- Sammy Sosa
-- Ken Griffey
-
-# Team ranking
----
-- Chicago Cubs
-- St Louis Cardinals
-EOL
- );
- }
-
- public function testSequenceInAMapping()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- Yaml::parse(<<<'EOF'
-yaml:
- hash: me
- - array stuff
-EOF
- );
- }
-
- public function testSequenceInMappingStartedBySingleDashLine()
- {
- $yaml = <<<'EOT'
-a:
--
- b:
- -
- bar: baz
-- foo
-d: e
-EOT;
- $expected = [
- 'a' => [
- [
- 'b' => [
- [
- 'bar' => 'baz',
- ],
- ],
- ],
- 'foo',
- ],
- 'd' => 'e',
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function testSequenceFollowedByCommentEmbeddedInMapping()
- {
- $yaml = <<<'EOT'
-a:
- b:
- - c
-# comment
- d: e
-EOT;
- $expected = [
- 'a' => [
- 'b' => ['c'],
- 'd' => 'e',
- ],
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function testNonStringFollowedByCommentEmbeddedInMapping()
- {
- $yaml = <<<'EOT'
-a:
- b:
- {}
-# comment
- d:
- 1.1
-# another comment
-EOT;
- $expected = [
- 'a' => [
- 'b' => [],
- 'd' => 1.1,
- ],
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function getParseExceptionNotAffectedMultiLineStringLastResortParsing()
- {
- $tests = [];
-
- $yaml = <<<'EOT'
-a
- b:
-EOT;
- $tests['parse error on first line'] = [$yaml];
-
- $yaml = <<<'EOT'
-a
-
-b
- c:
-EOT;
- $tests['parse error due to inconsistent indentation'] = [$yaml];
-
- $yaml = <<<'EOT'
- & * ! | > ' " % @ ` #, { asd a;sdasd }-@^qw3
-EOT;
- $tests['symfony/symfony/issues/22967#issuecomment-322067742'] = [$yaml];
-
- return $tests;
- }
-
- /**
- * @dataProvider getParseExceptionNotAffectedMultiLineStringLastResortParsing
- */
- public function testParseExceptionNotAffectedByMultiLineStringLastResortParsing($yaml)
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->parser->parse($yaml);
- }
-
- public function testMultiLineStringLastResortParsing()
- {
- $yaml = <<<'EOT'
-test:
- You can have things that don't look like strings here
- true
- yes you can
-EOT;
- $expected = [
- 'test' => 'You can have things that don\'t look like strings here true yes you can',
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
-
- $yaml = <<<'EOT'
-a:
- b
- c
-EOT;
- $expected = [
- 'a' => 'b c',
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function testMappingInASequence()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- Yaml::parse(<<<'EOF'
-yaml:
- - array stuff
- hash: me
-EOF
- );
- }
-
- public function testScalarInSequence()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('missing colon');
- Yaml::parse(<<<'EOF'
-foo:
- - bar
-"missing colon"
- foo: bar
-EOF
- );
- }
-
- /**
- * > It is an error for two equal keys to appear in the same mapping node.
- * > In such a case the YAML processor may continue, ignoring the second
- * > `key: value` pair and issuing an appropriate warning. This strategy
- * > preserves a consistent information model for one-pass and random access
- * > applications.
- *
- * @see http://yaml.org/spec/1.2/spec.html#id2759572
- * @see http://yaml.org/spec/1.1/#id932806
- * @group legacy
- */
- public function testMappingDuplicateKeyBlock()
- {
- $input = <<<'EOD'
-parent:
- child: first
- child: duplicate
-parent:
- child: duplicate
- child: duplicate
-EOD;
- $expected = [
- 'parent' => [
- 'child' => 'first',
- ],
- ];
- $this->assertSame($expected, Yaml::parse($input));
- }
-
- /**
- * @group legacy
- */
- public function testMappingDuplicateKeyFlow()
- {
- $input = <<<'EOD'
-parent: { child: first, child: duplicate }
-parent: { child: duplicate, child: duplicate }
-EOD;
- $expected = [
- 'parent' => [
- 'child' => 'first',
- ],
- ];
- $this->assertSame($expected, Yaml::parse($input));
- }
-
- /**
- * @group legacy
- * @dataProvider getParseExceptionOnDuplicateData
- * @expectedDeprecation Duplicate key "%s" detected whilst parsing YAML. Silent handling of duplicate mapping keys in YAML is deprecated %s and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0 on line %d.
- * throws \Symfony\Component\Yaml\Exception\ParseException in 4.0
- */
- public function testParseExceptionOnDuplicate($input, $duplicateKey, $lineNumber)
- {
- Yaml::parse($input);
- }
-
- public function getParseExceptionOnDuplicateData()
- {
- $tests = [];
-
- $yaml = <<assertEquals(['hash' => null], Yaml::parse($input));
- }
-
- public function testCommentAtTheRootIndent()
- {
- $this->assertEquals([
- 'services' => [
- 'app.foo_service' => [
- 'class' => 'Foo',
- ],
- 'app/bar_service' => [
- 'class' => 'Bar',
- ],
- ],
- ], Yaml::parse(<<<'EOF'
-# comment 1
-services:
-# comment 2
- # comment 3
- app.foo_service:
- class: Foo
-# comment 4
- # comment 5
- app/bar_service:
- class: Bar
-EOF
- ));
- }
-
- public function testStringBlockWithComments()
- {
- $this->assertEquals(['content' => <<<'EOT'
-# comment 1
-header
-
- # comment 2
-
- ]title
-
-
-footer # comment3
-EOT
- ], Yaml::parse(<<<'EOF'
-content: |
- # comment 1
- header
-
- # comment 2
-
- title
-
-
- footer # comment3
-EOF
- ));
- }
-
- public function testFoldedStringBlockWithComments()
- {
- $this->assertEquals([['content' => <<<'EOT'
-# comment 1
-header
-
- # comment 2
-
- title
-
-
-footer # comment3
-EOT
- ]], Yaml::parse(<<<'EOF'
--
- content: |
- # comment 1
- header
-
- # comment 2
-
- title
-
-
- footer # comment3
-EOF
- ));
- }
-
- public function testNestedFoldedStringBlockWithComments()
- {
- $this->assertEquals([[
- 'title' => 'some title',
- 'content' => <<<'EOT'
-# comment 1
-header
-
- # comment 2
-
- title
-
-
-footer # comment3
-EOT
- ]], Yaml::parse(<<<'EOF'
--
- title: some title
- content: |
- # comment 1
- header
-
- # comment 2
-
- title
-
-
- footer # comment3
-EOF
- ));
- }
-
- public function testReferenceResolvingInInlineStrings()
- {
- $this->assertEquals([
- 'var' => 'var-value',
- 'scalar' => 'var-value',
- 'list' => ['var-value'],
- 'list_in_list' => [['var-value']],
- 'map_in_list' => [['key' => 'var-value']],
- 'embedded_mapping' => [['key' => 'var-value']],
- 'map' => ['key' => 'var-value'],
- 'list_in_map' => ['key' => ['var-value']],
- 'map_in_map' => ['foo' => ['bar' => 'var-value']],
- ], Yaml::parse(<<<'EOF'
-var: &var var-value
-scalar: *var
-list: [ *var ]
-list_in_list: [[ *var ]]
-map_in_list: [ { key: *var } ]
-embedded_mapping: [ key: *var ]
-map: { key: *var }
-list_in_map: { key: [*var] }
-map_in_map: { foo: { bar: *var } }
-EOF
- ));
- }
-
- public function testYamlDirective()
- {
- $yaml = <<<'EOF'
-%YAML 1.2
----
-foo: 1
-bar: 2
-EOF;
- $this->assertEquals(['foo' => 1, 'bar' => 2], $this->parser->parse($yaml));
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Implicit casting of numeric key to string is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0. Quote your evaluable mapping keys instead on line 2.
- */
- public function testFloatKeys()
- {
- $yaml = <<<'EOF'
-foo:
- 1.2: "bar"
- 1.3: "baz"
-EOF;
-
- $expected = [
- 'foo' => [
- '1.2' => 'bar',
- '1.3' => 'baz',
- ],
- ];
-
- $this->assertEquals($expected, $this->parser->parse($yaml));
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Implicit casting of non-string key to string is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0. Quote your evaluable mapping keys instead on line 1.
- */
- public function testBooleanKeys()
- {
- $yaml = <<<'EOF'
-true: foo
-false: bar
-EOF;
-
- $expected = [
- 1 => 'foo',
- 0 => 'bar',
- ];
-
- $this->assertEquals($expected, $this->parser->parse($yaml));
- }
-
- public function testExplicitStringCasting()
- {
- $yaml = <<<'EOF'
-'1.2': "bar"
-!!str 1.3: "baz"
-
-'true': foo
-!!str false: bar
-
-!!str null: 'null'
-'~': 'null'
-EOF;
-
- $expected = [
- '1.2' => 'bar',
- '1.3' => 'baz',
- 'true' => 'foo',
- 'false' => 'bar',
- 'null' => 'null',
- '~' => 'null',
- ];
-
- $this->assertEquals($expected, $this->parser->parse($yaml));
- }
-
- public function testColonInMappingValueException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('A colon cannot be used in an unquoted mapping value');
- $yaml = <<<'EOF'
-foo: bar: baz
-EOF;
-
- $this->parser->parse($yaml);
- }
-
- public function testColonInMappingValueExceptionNotTriggeredByColonInComment()
- {
- $yaml = <<<'EOT'
-foo:
- bar: foobar # Note: a comment after a colon
-EOT;
-
- $this->assertSame(['foo' => ['bar' => 'foobar']], $this->parser->parse($yaml));
- }
-
- /**
- * @dataProvider getCommentLikeStringInScalarBlockData
- */
- public function testCommentLikeStringsAreNotStrippedInBlockScalars($yaml, $expectedParserResult)
- {
- $this->assertSame($expectedParserResult, $this->parser->parse($yaml));
- }
-
- public function getCommentLikeStringInScalarBlockData()
- {
- $tests = [];
-
- $yaml = <<<'EOT'
-pages:
- -
- title: some title
- content: |
- # comment 1
- header
-
- # comment 2
-
- title
-
-
- footer # comment3
-EOT;
- $expected = [
- 'pages' => [
- [
- 'title' => 'some title',
- 'content' => <<<'EOT'
-# comment 1
-header
-
- # comment 2
-
- title
-
-
-footer # comment3
-EOT
- ,
- ],
- ],
- ];
- $tests[] = [$yaml, $expected];
-
- $yaml = <<<'EOT'
-test: |
- foo
- # bar
- baz
-collection:
- - one: |
- foo
- # bar
- baz
- - two: |
- foo
- # bar
- baz
-EOT;
- $expected = [
- 'test' => <<<'EOT'
-foo
-# bar
-baz
-
-EOT
- ,
- 'collection' => [
- [
- 'one' => <<<'EOT'
-foo
-# bar
-baz
-
-EOT
- ,
- ],
- [
- 'two' => <<<'EOT'
-foo
-# bar
-baz
-EOT
- ,
- ],
- ],
- ];
- $tests[] = [$yaml, $expected];
-
- $yaml = <<<'EOT'
-foo:
- bar:
- scalar-block: >
- line1
- line2>
- baz:
-# comment
- foobar: ~
-EOT;
- $expected = [
- 'foo' => [
- 'bar' => [
- 'scalar-block' => "line1 line2>\n",
- ],
- 'baz' => [
- 'foobar' => null,
- ],
- ],
- ];
- $tests[] = [$yaml, $expected];
-
- $yaml = <<<'EOT'
-a:
- b: hello
-# c: |
-# first row
-# second row
- d: hello
-EOT;
- $expected = [
- 'a' => [
- 'b' => 'hello',
- 'd' => 'hello',
- ],
- ];
- $tests[] = [$yaml, $expected];
-
- return $tests;
- }
-
- public function testBlankLinesAreParsedAsNewLinesInFoldedBlocks()
- {
- $yaml = <<<'EOT'
-test: >
- A heading
-
-
- - a list
- - may be a good example
-
-EOT;
-
- $this->assertSame(
- [
- 'test' => <<<'EOT'
-A heading
- - a list
- may be a good example
-EOT
- ,
- ],
- $this->parser->parse($yaml)
- );
- }
-
- public function testAdditionallyIndentedLinesAreParsedAsNewLinesInFoldedBlocks()
- {
- $yaml = <<<'EOT'
-test: >
- A heading
-
-
- - a list
- - may be a good example
-
-EOT;
-
- $this->assertSame(
- [
- 'test' => <<<'EOT'
-A heading
-
- - a list
- - may be a good example
-
-EOT
- ,
- ],
- $this->parser->parse($yaml)
- );
- }
-
- /**
- * @dataProvider getBinaryData
- */
- public function testParseBinaryData($data)
- {
- $this->assertSame(['data' => 'Hello world'], $this->parser->parse($data));
- }
-
- public function getBinaryData()
- {
- return [
- 'enclosed with double quotes' => ['data: !!binary "SGVsbG8gd29ybGQ="'],
- 'enclosed with single quotes' => ["data: !!binary 'SGVsbG8gd29ybGQ='"],
- 'containing spaces' => ['data: !!binary "SGVs bG8gd 29ybGQ="'],
- 'in block scalar' => [
- <<<'EOT'
-data: !!binary |
- SGVsbG8gd29ybGQ=
-EOT
- ],
- 'containing spaces in block scalar' => [
- <<<'EOT'
-data: !!binary |
- SGVs bG8gd 29ybGQ=
-EOT
- ],
- ];
- }
-
- /**
- * @dataProvider getInvalidBinaryData
- */
- public function testParseInvalidBinaryData($data, $expectedMessage)
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessageMatches($expectedMessage);
-
- $this->parser->parse($data);
- }
-
- public function getInvalidBinaryData()
- {
- return [
- 'length not a multiple of four' => ['data: !!binary "SGVsbG8d29ybGQ="', '/The normalized base64 encoded data \(data without whitespace characters\) length must be a multiple of four \(\d+ bytes given\)/'],
- 'invalid characters' => ['!!binary "SGVsbG8#d29ybGQ="', '/The base64 encoded data \(.*\) contains invalid characters/'],
- 'too many equals characters' => ['data: !!binary "SGVsbG8gd29yb==="', '/The base64 encoded data \(.*\) contains invalid characters/'],
- 'misplaced equals character' => ['data: !!binary "SGVsbG8gd29ybG=Q"', '/The base64 encoded data \(.*\) contains invalid characters/'],
- 'length not a multiple of four in block scalar' => [
- <<<'EOT'
-data: !!binary |
- SGVsbG8d29ybGQ=
-EOT
- ,
- '/The normalized base64 encoded data \(data without whitespace characters\) length must be a multiple of four \(\d+ bytes given\)/',
- ],
- 'invalid characters in block scalar' => [
- <<<'EOT'
-data: !!binary |
- SGVsbG8#d29ybGQ=
-EOT
- ,
- '/The base64 encoded data \(.*\) contains invalid characters/',
- ],
- 'too many equals characters in block scalar' => [
- <<<'EOT'
-data: !!binary |
- SGVsbG8gd29yb===
-EOT
- ,
- '/The base64 encoded data \(.*\) contains invalid characters/',
- ],
- 'misplaced equals character in block scalar' => [
- <<<'EOT'
-data: !!binary |
- SGVsbG8gd29ybG=Q
-EOT
- ,
- '/The base64 encoded data \(.*\) contains invalid characters/',
- ],
- ];
- }
-
- public function testParseDateAsMappingValue()
- {
- $yaml = <<<'EOT'
-date: 2002-12-14
-EOT;
- $expectedDate = new \DateTime();
- $expectedDate->setTimeZone(new \DateTimeZone('UTC'));
- $expectedDate->setDate(2002, 12, 14);
- $expectedDate->setTime(0, 0, 0);
-
- $this->assertEquals(['date' => $expectedDate], $this->parser->parse($yaml, Yaml::PARSE_DATETIME));
- }
-
- /**
- * @param $lineNumber
- * @param $yaml
- * @dataProvider parserThrowsExceptionWithCorrectLineNumberProvider
- */
- public function testParserThrowsExceptionWithCorrectLineNumber($lineNumber, $yaml)
- {
- $this->expectException('\Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage(sprintf('Unexpected characters near "," at line %d (near "bar: "123",").', $lineNumber));
-
- $this->parser->parse($yaml);
- }
-
- public function parserThrowsExceptionWithCorrectLineNumberProvider()
- {
- return [
- [
- 4,
- <<<'YAML'
-foo:
- -
- # bar
- bar: "123",
-YAML
- ],
- [
- 5,
- <<<'YAML'
-foo:
- -
- # bar
- # bar
- bar: "123",
-YAML
- ],
- [
- 8,
- <<<'YAML'
-foo:
- -
- # foobar
- baz: 123
-bar:
- -
- # bar
- bar: "123",
-YAML
- ],
- [
- 10,
- <<<'YAML'
-foo:
- -
- # foobar
- # foobar
- baz: 123
-bar:
- -
- # bar
- # bar
- bar: "123",
-YAML
- ],
- ];
- }
-
- public function testParseMultiLineQuotedString()
- {
- $yaml = <<assertSame(['foo' => 'bar baz foobar foo', 'bar' => 'baz'], $this->parser->parse($yaml));
- }
-
- public function testMultiLineQuotedStringWithTrailingBackslash()
- {
- $yaml = <<assertSame(['foobar' => 'foobar'], $this->parser->parse($yaml));
- }
-
- public function testCommentCharactersInMultiLineQuotedStrings()
- {
- $yaml = << [
- 'foobar' => 'foo #bar',
- 'bar' => 'baz',
- ],
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function testBlankLinesInQuotedMultiLineString()
- {
- $yaml = << "foo\nbar",
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function testEscapedQuoteInQuotedMultiLineString()
- {
- $yaml = << 'foo "bar" baz',
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function testBackslashInQuotedMultiLineString()
- {
- $yaml = << 'foo bar\\',
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function testParseMultiLineUnquotedString()
- {
- $yaml = <<assertSame(['foo' => 'bar baz foobar foo', 'bar' => 'baz'], $this->parser->parse($yaml));
- }
-
- public function testParseMultiLineString()
- {
- $this->assertEquals("foo bar\nbaz", $this->parser->parse("foo\nbar\n\nbaz"));
- }
-
- /**
- * @dataProvider multiLineDataProvider
- */
- public function testParseMultiLineMappingValue($yaml, $expected, $parseError)
- {
- $this->assertEquals($expected, $this->parser->parse($yaml));
- }
-
- public function multiLineDataProvider()
- {
- $tests = [];
-
- $yaml = <<<'EOF'
-foo:
-- bar:
- one
-
- two
- three
-EOF;
- $expected = [
- 'foo' => [
- [
- 'bar' => "one\ntwo three",
- ],
- ],
- ];
-
- $tests[] = [$yaml, $expected, false];
-
- $yaml = <<<'EOF'
-bar
-"foo"
-EOF;
- $expected = 'bar "foo"';
-
- $tests[] = [$yaml, $expected, false];
-
- $yaml = <<<'EOF'
-bar
-"foo
-EOF;
- $expected = 'bar "foo';
-
- $tests[] = [$yaml, $expected, false];
-
- $yaml = <<<'EOF'
-bar
-
-'foo'
-EOF;
- $expected = "bar\n'foo'";
-
- $tests[] = [$yaml, $expected, false];
-
- $yaml = <<<'EOF'
-bar
-
-foo'
-EOF;
- $expected = "bar\nfoo'";
-
- $tests[] = [$yaml, $expected, false];
-
- return $tests;
- }
-
- public function testTaggedInlineMapping()
- {
- $this->assertEquals(new TaggedValue('foo', ['foo' => 'bar']), $this->parser->parse('!foo {foo: bar}', Yaml::PARSE_CUSTOM_TAGS));
- }
-
- /**
- * @dataProvider taggedValuesProvider
- */
- public function testCustomTagSupport($expected, $yaml)
- {
- $this->assertEquals($expected, $this->parser->parse($yaml, Yaml::PARSE_CUSTOM_TAGS));
- }
-
- public function taggedValuesProvider()
- {
- return [
- 'sequences' => [
- [new TaggedValue('foo', ['yaml']), new TaggedValue('quz', ['bar'])],
- << [
- new TaggedValue('foo', ['foo' => new TaggedValue('quz', ['bar']), 'quz' => new TaggedValue('foo', ['quz' => 'bar'])]),
- << [
- [new TaggedValue('foo', ['foo', 'bar']), new TaggedValue('quz', ['foo' => 'bar', 'quz' => new TaggedValue('bar', ['one' => 'bar'])])],
- <<expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('Tags support is not enabled. Enable the `Yaml::PARSE_CUSTOM_TAGS` flag to use "!iterator" at line 1 (near "!iterator [foo]").');
- $this->parser->parse('!iterator [foo]');
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Using the unquoted scalar value "!iterator foo" is deprecated since Symfony 3.3 and will be considered as a tagged value in 4.0. You must quote it on line 1.
- */
- public function testUnsupportedTagWithScalar()
- {
- $this->assertEquals('!iterator foo', $this->parser->parse('!iterator foo'));
- }
-
- public function testExceptionWhenUsingUnsupportedBuiltInTags()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('The built-in tag "!!foo" is not implemented at line 1 (near "!!foo").');
- $this->parser->parse('!!foo');
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Starting an unquoted string with a question mark followed by a space is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0 on line 1.
- */
- public function testComplexMappingThrowsParseException()
- {
- $yaml = <<parser->parse($yaml);
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Starting an unquoted string with a question mark followed by a space is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0 on line 2.
- */
- public function testComplexMappingNestedInMappingThrowsParseException()
- {
- $yaml = <<parser->parse($yaml);
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Starting an unquoted string with a question mark followed by a space is deprecated since Symfony 3.3 and will throw \Symfony\Component\Yaml\Exception\ParseException in 4.0 on line 1.
- */
- public function testComplexMappingNestedInSequenceThrowsParseException()
- {
- $yaml = <<parser->parse($yaml);
- }
-
- public function testParsingIniThrowsException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('Unable to parse at line 1 (near "[parameters]").');
- $ini = <<parser->parse($ini);
- }
-
- private function loadTestsFromFixtureFiles($testsFile)
- {
- $parser = new Parser();
-
- $tests = [];
- $files = $parser->parseFile(__DIR__.'/Fixtures/'.$testsFile);
- foreach ($files as $file) {
- $yamls = file_get_contents(__DIR__.'/Fixtures/'.$file.'.yml');
-
- // split YAMLs documents
- foreach (preg_split('/^---( %YAML\:1\.0)?/m', $yamls) as $yaml) {
- if (!$yaml) {
- continue;
- }
-
- $test = $parser->parse($yaml);
- if (isset($test['todo']) && $test['todo']) {
- // TODO
- } else {
- eval('$expected = '.trim($test['php']).';');
-
- $tests[] = [var_export($expected, true), $test['yaml'], $test['test'], isset($test['deprecated']) ? $test['deprecated'] : false];
- }
- }
- }
-
- return $tests;
- }
-
- public function testCanParseVeryLongValue()
- {
- $longStringWithSpaces = str_repeat('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ', 20000);
- $trickyVal = ['x' => $longStringWithSpaces];
-
- $yamlString = Yaml::dump($trickyVal);
- $arrayFromYaml = $this->parser->parse($yamlString);
-
- $this->assertEquals($trickyVal, $arrayFromYaml);
- }
-
- public function testParserCleansUpReferencesBetweenRuns()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('Reference "foo" does not exist at line 2');
- $yaml = <<parser->parse($yaml);
-
- $yaml = <<parser->parse($yaml);
- }
-
- public function testPhpConstantTagMappingKey()
- {
- $yaml = << [
- 'foo' => [
- 'from' => [
- 'bar',
- ],
- 'to' => 'baz',
- ],
- ],
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml, Yaml::PARSE_CONSTANT));
- }
-
- /**
- * @group legacy
- * @expectedDeprecation The !php/const: tag to indicate dumped PHP constants is deprecated since Symfony 3.4 and will be removed in 4.0. Use the !php/const (without the colon) tag instead on line 2.
- * @expectedDeprecation The !php/const: tag to indicate dumped PHP constants is deprecated since Symfony 3.4 and will be removed in 4.0. Use the !php/const (without the colon) tag instead on line 4.
- * @expectedDeprecation The !php/const: tag to indicate dumped PHP constants is deprecated since Symfony 3.4 and will be removed in 4.0. Use the !php/const (without the colon) tag instead on line 5.
- */
- public function testDeprecatedPhpConstantTagMappingKey()
- {
- $yaml = << [
- 'foo' => [
- 'from' => [
- 'bar',
- ],
- 'to' => 'baz',
- ],
- ],
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml, Yaml::PARSE_CONSTANT));
- }
-
- /**
- * @group legacy
- * @expectedDeprecation Using the Yaml::PARSE_KEYS_AS_STRINGS flag is deprecated since Symfony 3.4 as it will be removed in 4.0. Quote your keys when they are evaluable instead.
- */
- public function testPhpConstantTagMappingKeyWithKeysCastToStrings()
- {
- $yaml = << [
- 'foo' => [
- 'from' => [
- 'bar',
- ],
- 'to' => 'baz',
- ],
- ],
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml, Yaml::PARSE_CONSTANT | Yaml::PARSE_KEYS_AS_STRINGS));
- }
-
- public function testPhpConstantTagMappingAsScalarKey()
- {
- $yaml = <<assertSame([
- 'map1' => [['foo' => 'value_0', 'bar' => 'value_1']],
- 'map2' => [['foo' => 'value_0', 'bar' => 'value_1']],
- ], $this->parser->parse($yaml, Yaml::PARSE_CONSTANT));
- }
-
- public function testTagMappingAsScalarKey()
- {
- $yaml = <<assertSame([
- 'map1' => [['0' => 'value_0', '1' => 'value_1']],
- ], $this->parser->parse($yaml));
- }
-
- public function testMergeKeysWhenMappingsAreParsedAsObjects()
- {
- $yaml = << (object) [
- 'bar' => 1,
- ],
- 'bar' => (object) [
- 'baz' => 2,
- 'bar' => 1,
- ],
- 'baz' => (object) [
- 'baz_foo' => 3,
- 'baz_bar' => 4,
- ],
- 'foobar' => (object) [
- 'bar' => null,
- 'baz' => 2,
- ],
- ];
-
- $this->assertEquals($expected, $this->parser->parse($yaml, Yaml::PARSE_OBJECT_FOR_MAP));
- }
-
- public function testFilenamesAreParsedAsStringsWithoutFlag()
- {
- $file = __DIR__.'/Fixtures/index.yml';
-
- $this->assertSame($file, $this->parser->parse($file));
- }
-
- public function testParseFile()
- {
- $this->assertIsArray($this->parser->parseFile(__DIR__.'/Fixtures/index.yml'));
- }
-
- public function testParsingNonExistentFilesThrowsException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessageMatches('#^File ".+/Fixtures/nonexistent.yml" does not exist\.$#');
- $this->parser->parseFile(__DIR__.'/Fixtures/nonexistent.yml');
- }
-
- public function testParsingNotReadableFilesThrowsException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessageMatches('#^File ".+/Fixtures/not_readable.yml" cannot be read\.$#');
- if ('\\' === \DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('chmod is not supported on Windows');
- }
-
- if (!getenv('USER') || 'root' === getenv('USER')) {
- $this->markTestSkipped('This test will fail if run under superuser');
- }
-
- $file = __DIR__.'/Fixtures/not_readable.yml';
- chmod($file, 0200);
-
- $this->parser->parseFile($file);
- }
-
- public function testParseReferencesOnMergeKeys()
- {
- $yaml = << [
- 'a' => 'foo',
- 'b' => 'bar',
- 'c' => 'baz',
- ],
- 'mergekeyderef' => [
- 'd' => 'quux',
- 'b' => 'bar',
- 'c' => 'baz',
- ],
- ];
-
- $this->assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function testParseReferencesOnMergeKeysWithMappingsParsedAsObjects()
- {
- $yaml = << (object) [
- 'a' => 'foo',
- 'b' => 'bar',
- 'c' => 'baz',
- ],
- 'mergekeyderef' => (object) [
- 'd' => 'quux',
- 'b' => 'bar',
- 'c' => 'baz',
- ],
- ];
-
- $this->assertEquals($expected, $this->parser->parse($yaml, Yaml::PARSE_OBJECT_FOR_MAP));
- }
-
- public function testEvalRefException()
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('Reference "foo" does not exist');
- $yaml = <<parser->parse($yaml);
- }
-
- /**
- * @dataProvider circularReferenceProvider
- */
- public function testDetectCircularReferences($yaml)
- {
- $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
- $this->expectExceptionMessage('Circular reference [foo, bar, foo] detected');
- $this->parser->parse($yaml, Yaml::PARSE_CUSTOM_TAGS);
- }
-
- public function circularReferenceProvider()
- {
- $tests = [];
-
- $yaml = <<assertSame($expected, $this->parser->parse($yaml));
- }
-
- public function indentedMappingData()
- {
- $tests = [];
-
- $yaml = << [
- [
- 'bar' => 'foobar',
- 'baz' => 'foobaz',
- ],
- ],
- ];
- $tests['comment line is first line in indented block'] = [$yaml, $expected];
-
- $yaml = << [
- [
- 'bar' => [
- 'baz' => [1, 2, 3],
- ],
- ],
- ],
- ];
- $tests['mapping value on new line starting with a comment line'] = [$yaml, $expected];
-
- $yaml = << [
- [
- 'bar' => 'foobar',
- ],
- ],
- ];
- $tests['mapping in sequence starting on a new line'] = [$yaml, $expected];
-
- $yaml = << [
- 'bar' => 'baz',
- ],
- ];
- $tests['blank line at the beginning of an indented mapping value'] = [$yaml, $expected];
-
- return $tests;
- }
-
- public function testMultiLineComment()
- {
- $yaml = <<assertSame(['parameters' => 'abc'], $this->parser->parse($yaml));
- }
-
- public function testParseValueWithModifiers()
- {
- $yaml = <<assertSame(
- [
- 'parameters' => [
- 'abc' => implode("\n", ['one', 'two', 'three', 'four', 'five']),
- ],
- ],
- $this->parser->parse($yaml)
- );
- }
-
- public function testParseValueWithNegativeModifiers()
- {
- $yaml = <<assertSame(
- [
- 'parameters' => [
- 'abc' => implode("\n", ['one', 'two', 'three', 'four', 'five']),
- ],
- ],
- $this->parser->parse($yaml)
- );
- }
-
- /**
- * This is a regression test for a bug where a YAML block with a nested multiline string using | was parsed without
- * a trailing \n when a shorter YAML document was parsed before.
- *
- * When a shorter document was parsed before, the nested string did not have a \n at the end of the string, because
- * the Parser thought it was the end of the file, even though it is not.
- */
- public function testParsingMultipleDocuments()
- {
- $shortDocument = 'foo: bar';
- $longDocument = <<parser->parse($shortDocument);
-
- // After the total number of lines has been reset the result will be the same as if a new parser was used
- // (before, there was no \n after row2)
- $this->assertSame(['a' => ['b' => "row\nrow2\n"], 'c' => 'd'], $this->parser->parse($longDocument));
- }
-}
-
-class B
-{
- public $b = 'foo';
-
- const FOO = 'foo';
- const BAR = 'bar';
- const BAZ = 'baz';
-}
diff --git a/vendor/symfony/yaml/Tests/YamlTest.php b/vendor/symfony/yaml/Tests/YamlTest.php
deleted file mode 100644
index 7be12664..00000000
--- a/vendor/symfony/yaml/Tests/YamlTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Yaml\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Yaml\Yaml;
-
-class YamlTest extends TestCase
-{
- public function testParseAndDump()
- {
- $data = ['lorem' => 'ipsum', 'dolor' => 'sit'];
- $yml = Yaml::dump($data);
- $parsed = Yaml::parse($yml);
- $this->assertEquals($data, $parsed);
- }
-
- public function testZeroIndentationThrowsException()
- {
- $this->expectException('InvalidArgumentException');
- $this->expectExceptionMessage('The indentation must be greater than zero');
- Yaml::dump(['lorem' => 'ipsum', 'dolor' => 'sit'], 2, 0);
- }
-
- public function testNegativeIndentationThrowsException()
- {
- $this->expectException('InvalidArgumentException');
- $this->expectExceptionMessage('The indentation must be greater than zero');
- Yaml::dump(['lorem' => 'ipsum', 'dolor' => 'sit'], 2, -4);
- }
-}
diff --git a/vendor/symfony/yaml/Unescaper.php b/vendor/symfony/yaml/Unescaper.php
index 6a12999d..6bdf216a 100644
--- a/vendor/symfony/yaml/Unescaper.php
+++ b/vendor/symfony/yaml/Unescaper.php
@@ -26,7 +26,7 @@ class Unescaper
/**
* Regex fragment that matches an escaped character in a double quoted string.
*/
- const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)';
+ public const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)';
/**
* Unescapes a single quoted string.
@@ -35,7 +35,7 @@ class Unescaper
*
* @return string The unescaped string
*/
- public function unescapeSingleQuotedString($value)
+ public function unescapeSingleQuotedString(string $value): string
{
return str_replace('\'\'', '\'', $value);
}
@@ -47,7 +47,7 @@ public function unescapeSingleQuotedString($value)
*
* @return string The unescaped string
*/
- public function unescapeDoubleQuotedString($value)
+ public function unescapeDoubleQuotedString(string $value): string
{
$callback = function ($match) {
return $this->unescapeCharacter($match[0]);
@@ -64,7 +64,7 @@ public function unescapeDoubleQuotedString($value)
*
* @return string The unescaped character
*/
- private function unescapeCharacter($value)
+ private function unescapeCharacter(string $value): string
{
switch ($value[1]) {
case '0':
@@ -120,12 +120,8 @@ private function unescapeCharacter($value)
/**
* Get the UTF-8 character for the given code point.
- *
- * @param int $c The unicode code point
- *
- * @return string The corresponding UTF-8 character
*/
- private static function utf8chr($c)
+ private static function utf8chr(int $c): string
{
if (0x80 > $c %= 0x200000) {
return \chr($c);
diff --git a/vendor/symfony/yaml/Yaml.php b/vendor/symfony/yaml/Yaml.php
index 87190833..4fea47f9 100644
--- a/vendor/symfony/yaml/Yaml.php
+++ b/vendor/symfony/yaml/Yaml.php
@@ -18,26 +18,22 @@
*
* @author Fabien Potencier
*
- * @final since version 3.4
+ * @final
*/
class Yaml
{
- const DUMP_OBJECT = 1;
- const PARSE_EXCEPTION_ON_INVALID_TYPE = 2;
- const PARSE_OBJECT = 4;
- const PARSE_OBJECT_FOR_MAP = 8;
- const DUMP_EXCEPTION_ON_INVALID_TYPE = 16;
- const PARSE_DATETIME = 32;
- const DUMP_OBJECT_AS_MAP = 64;
- const DUMP_MULTI_LINE_LITERAL_BLOCK = 128;
- const PARSE_CONSTANT = 256;
- const PARSE_CUSTOM_TAGS = 512;
- const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024;
-
- /**
- * @deprecated since version 3.4, to be removed in 4.0. Quote your evaluable keys instead.
- */
- const PARSE_KEYS_AS_STRINGS = 2048;
+ public const DUMP_OBJECT = 1;
+ public const PARSE_EXCEPTION_ON_INVALID_TYPE = 2;
+ public const PARSE_OBJECT = 4;
+ public const PARSE_OBJECT_FOR_MAP = 8;
+ public const DUMP_EXCEPTION_ON_INVALID_TYPE = 16;
+ public const PARSE_DATETIME = 32;
+ public const DUMP_OBJECT_AS_MAP = 64;
+ public const DUMP_MULTI_LINE_LITERAL_BLOCK = 128;
+ public const PARSE_CONSTANT = 256;
+ public const PARSE_CUSTOM_TAGS = 512;
+ public const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024;
+ public const DUMP_NULL_AS_TILDE = 2048;
/**
* Parses a YAML file into a PHP value.
@@ -54,7 +50,7 @@ class Yaml
*
* @throws ParseException If the file could not be read or the YAML is not valid
*/
- public static function parseFile($filename, $flags = 0)
+ public static function parseFile(string $filename, int $flags = 0)
{
$yaml = new Parser();
@@ -77,34 +73,8 @@ public static function parseFile($filename, $flags = 0)
*
* @throws ParseException If the YAML is not valid
*/
- public static function parse($input, $flags = 0)
+ public static function parse(string $input, int $flags = 0)
{
- if (\is_bool($flags)) {
- @trigger_error('Passing a boolean flag to toggle exception handling is deprecated since Symfony 3.1 and will be removed in 4.0. Use the PARSE_EXCEPTION_ON_INVALID_TYPE flag instead.', \E_USER_DEPRECATED);
-
- if ($flags) {
- $flags = self::PARSE_EXCEPTION_ON_INVALID_TYPE;
- } else {
- $flags = 0;
- }
- }
-
- if (\func_num_args() >= 3) {
- @trigger_error('Passing a boolean flag to toggle object support is deprecated since Symfony 3.1 and will be removed in 4.0. Use the PARSE_OBJECT flag instead.', \E_USER_DEPRECATED);
-
- if (func_get_arg(2)) {
- $flags |= self::PARSE_OBJECT;
- }
- }
-
- if (\func_num_args() >= 4) {
- @trigger_error('Passing a boolean flag to toggle object for map support is deprecated since Symfony 3.1 and will be removed in 4.0. Use the Yaml::PARSE_OBJECT_FOR_MAP flag instead.', \E_USER_DEPRECATED);
-
- if (func_get_arg(3)) {
- $flags |= self::PARSE_OBJECT_FOR_MAP;
- }
- }
-
$yaml = new Parser();
return $yaml->parse($input, $flags);
@@ -123,26 +93,8 @@ public static function parse($input, $flags = 0)
*
* @return string A YAML string representing the original PHP value
*/
- public static function dump($input, $inline = 2, $indent = 4, $flags = 0)
+ public static function dump($input, int $inline = 2, int $indent = 4, int $flags = 0): string
{
- if (\is_bool($flags)) {
- @trigger_error('Passing a boolean flag to toggle exception handling is deprecated since Symfony 3.1 and will be removed in 4.0. Use the DUMP_EXCEPTION_ON_INVALID_TYPE flag instead.', \E_USER_DEPRECATED);
-
- if ($flags) {
- $flags = self::DUMP_EXCEPTION_ON_INVALID_TYPE;
- } else {
- $flags = 0;
- }
- }
-
- if (\func_num_args() >= 5) {
- @trigger_error('Passing a boolean flag to toggle object support is deprecated since Symfony 3.1 and will be removed in 4.0. Use the DUMP_OBJECT flag instead.', \E_USER_DEPRECATED);
-
- if (func_get_arg(4)) {
- $flags |= self::DUMP_OBJECT;
- }
- }
-
$yaml = new Dumper($indent);
return $yaml->dump($input, $inline, 0, $flags);
diff --git a/vendor/symfony/yaml/composer.json b/vendor/symfony/yaml/composer.json
index b2f0286e..10120348 100644
--- a/vendor/symfony/yaml/composer.json
+++ b/vendor/symfony/yaml/composer.json
@@ -1,7 +1,7 @@
{
"name": "symfony/yaml",
"type": "library",
- "description": "Symfony Yaml Component",
+ "description": "Loads and dumps YAML files",
"keywords": [],
"homepage": "https://symfony.com",
"license": "MIT",
@@ -16,11 +16,11 @@
}
],
"require": {
- "php": "^5.5.9|>=7.0.8",
+ "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8"
},
"require-dev": {
- "symfony/console": "~3.4|~4.0"
+ "symfony/console": "^3.4|^4.0|^5.0"
},
"conflict": {
"symfony/console": "<3.4"
diff --git a/vendor/symfony/yaml/phpunit.xml.dist b/vendor/symfony/yaml/phpunit.xml.dist
deleted file mode 100644
index b5d4d914..00000000
--- a/vendor/symfony/yaml/phpunit.xml.dist
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
- ./Tests/
-
-
-
-
-
- ./
-
- ./Tests
- ./vendor
-
-
-
-
diff --git a/version.php b/version.php
index 1e50864e..6d03ee49 100644
--- a/version.php
+++ b/version.php
@@ -28,7 +28,7 @@
$plugin->version = 2023122201;
$plugin->release = 2023122201;
$plugin->requires = 2022112800; // Our lowest supported Moodle (3.3.0).
-$plugin->supported = [400, 401];
+$plugin->supported = [400, 402];
// TODO $plugin->incompatible = ; // Available as of Moodle 3.9.0 or later.
$plugin->component = 'tool_dataflows';
$plugin->maturity = MATURITY_ALPHA;