Merge branch 'presets2'
commit
6e15420307
|
@ -0,0 +1 @@
|
||||||
|
/* Autogenerated by mailcow */
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
function presets($_action, $_kind) {
|
||||||
|
global $lang;
|
||||||
|
switch ($_action) {
|
||||||
|
case 'get':
|
||||||
|
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$presets = array();
|
||||||
|
$kind = strtolower(trim($_kind));
|
||||||
|
$lang_base = 'admin';
|
||||||
|
$presets_path = __DIR__ . '/presets/' . $kind;
|
||||||
|
if (!in_array($kind, ['rspamd', 'sieve'], true)) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
if ($kind === 'sieve') {
|
||||||
|
$lang_base = 'mailbox';
|
||||||
|
}
|
||||||
|
foreach (glob($presets_path . '/*.yml') as $filename) {
|
||||||
|
$presets[] = getPresetFromFilePath($filename, $lang_base);
|
||||||
|
}
|
||||||
|
return $presets;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
function getPresetFromFilePath($filePath, $lang_base) {
|
||||||
|
global $lang;
|
||||||
|
$preset = Spyc::YAMLLoad($filePath);
|
||||||
|
$preset = ['name' => basename($filePath, '.yml')] + $preset;
|
||||||
|
/* get translated headlines */
|
||||||
|
if (isset($preset['headline']) && strpos($preset['headline'], 'lang.') === 0) {
|
||||||
|
$langTextName = trim(substr($preset['headline'], 5));
|
||||||
|
if (isset($lang[$lang_base][$langTextName])) {
|
||||||
|
$preset['headline'] = $lang[$lang_base][$langTextName];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $preset;
|
||||||
|
}
|
|
@ -7,6 +7,7 @@
|
||||||
"soundasleep/html2text": "^0.5.0",
|
"soundasleep/html2text": "^0.5.0",
|
||||||
"ddeboer/imap": "^1.5",
|
"ddeboer/imap": "^1.5",
|
||||||
"matthiasmullie/minify": "^1.3",
|
"matthiasmullie/minify": "^1.3",
|
||||||
"bshaffer/oauth2-server-php": "^1.11"
|
"bshaffer/oauth2-server-php": "^1.11",
|
||||||
|
"mustangostang/spyc": "^0.6.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "c435e39c1b3cbefbecebc3dc6fcc8d89",
|
"content-hash": "dcb71091bb1065f99aca45ff50da1b7e",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bshaffer/oauth2-server-php",
|
"name": "bshaffer/oauth2-server-php",
|
||||||
|
@ -233,6 +233,56 @@
|
||||||
],
|
],
|
||||||
"time": "2018-10-25T15:19:41+00:00"
|
"time": "2018-10-25T15:19:41+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "mustangostang/spyc",
|
||||||
|
"version": "0.6.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git@github.com:mustangostang/spyc.git",
|
||||||
|
"reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
|
||||||
|
"reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "4.3.*@dev"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "0.5.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"Spyc.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "mustangostang",
|
||||||
|
"email": "vlad.andersen@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A simple YAML loader/dumper class for PHP",
|
||||||
|
"homepage": "https://github.com/mustangostang/spyc/",
|
||||||
|
"keywords": [
|
||||||
|
"spyc",
|
||||||
|
"yaml",
|
||||||
|
"yml"
|
||||||
|
],
|
||||||
|
"time": "2019-09-10T13:16:29+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "paragonie/random_compat",
|
"name": "paragonie/random_compat",
|
||||||
"version": "v9.99.99",
|
"version": "v9.99.99",
|
||||||
|
|
|
@ -279,7 +279,7 @@ class ClassLoader
|
||||||
*/
|
*/
|
||||||
public function setApcuPrefix($apcuPrefix)
|
public function setApcuPrefix($apcuPrefix)
|
||||||
{
|
{
|
||||||
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -377,7 +377,7 @@ class ClassLoader
|
||||||
$subPath = $class;
|
$subPath = $class;
|
||||||
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
||||||
$subPath = substr($subPath, 0, $lastPos);
|
$subPath = substr($subPath, 0, $lastPos);
|
||||||
$search = $subPath . '\\';
|
$search = $subPath.'\\';
|
||||||
if (isset($this->prefixDirsPsr4[$search])) {
|
if (isset($this->prefixDirsPsr4[$search])) {
|
||||||
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
||||||
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_files.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'04c6c5c2f7095ccf6c481d3e53e1776f' => $vendorDir . '/mustangostang/spyc/Spyc.php',
|
||||||
|
);
|
|
@ -47,6 +47,24 @@ class ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b
|
||||||
|
|
||||||
$loader->register(true);
|
$loader->register(true);
|
||||||
|
|
||||||
|
if ($useStaticLoader) {
|
||||||
|
$includeFiles = Composer\Autoload\ComposerStaticInit873464e4bd965a3168f133248b1b218b::$files;
|
||||||
|
} else {
|
||||||
|
$includeFiles = require __DIR__ . '/autoload_files.php';
|
||||||
|
}
|
||||||
|
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||||
|
composerRequire873464e4bd965a3168f133248b1b218b($fileIdentifier, $file);
|
||||||
|
}
|
||||||
|
|
||||||
return $loader;
|
return $loader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function composerRequire873464e4bd965a3168f133248b1b218b($fileIdentifier, $file)
|
||||||
|
{
|
||||||
|
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||||
|
require $file;
|
||||||
|
|
||||||
|
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -6,6 +6,10 @@ namespace Composer\Autoload;
|
||||||
|
|
||||||
class ComposerStaticInit873464e4bd965a3168f133248b1b218b
|
class ComposerStaticInit873464e4bd965a3168f133248b1b218b
|
||||||
{
|
{
|
||||||
|
public static $files = array (
|
||||||
|
'04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php',
|
||||||
|
);
|
||||||
|
|
||||||
public static $prefixLengthsPsr4 = array (
|
public static $prefixLengthsPsr4 = array (
|
||||||
'R' =>
|
'R' =>
|
||||||
array (
|
array (
|
||||||
|
|
|
@ -234,6 +234,58 @@
|
||||||
"relative"
|
"relative"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "mustangostang/spyc",
|
||||||
|
"version": "0.6.3",
|
||||||
|
"version_normalized": "0.6.3.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git@github.com:mustangostang/spyc.git",
|
||||||
|
"reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
|
||||||
|
"reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "4.3.*@dev"
|
||||||
|
},
|
||||||
|
"time": "2019-09-10T13:16:29+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "0.5.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"Spyc.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "mustangostang",
|
||||||
|
"email": "vlad.andersen@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A simple YAML loader/dumper class for PHP",
|
||||||
|
"homepage": "https://github.com/mustangostang/spyc/",
|
||||||
|
"keywords": [
|
||||||
|
"spyc",
|
||||||
|
"yaml",
|
||||||
|
"yml"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "paragonie/random_compat",
|
"name": "paragonie/random_compat",
|
||||||
"version": "v9.99.99",
|
"version": "v9.99.99",
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
vendor
|
||||||
|
composer.lock
|
||||||
|
.DS_Store
|
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2011 Vladimir Andersen
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
|
@ -0,0 +1,30 @@
|
||||||
|
**Spyc** is a YAML loader/dumper written in pure PHP. Given a YAML document, Spyc will return an array that
|
||||||
|
you can use however you see fit. Given an array, Spyc will return a string which contains a YAML document
|
||||||
|
built from your data.
|
||||||
|
|
||||||
|
**YAML** is an amazingly human friendly and strikingly versatile data serialization language which can be used
|
||||||
|
for log files, config files, custom protocols, the works. For more information, see http://www.yaml.org.
|
||||||
|
|
||||||
|
Spyc supports YAML 1.0 specification.
|
||||||
|
|
||||||
|
## Using Spyc
|
||||||
|
|
||||||
|
Using Spyc is trivial:
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
require_once "spyc.php";
|
||||||
|
$Data = Spyc::YAMLLoad('spyc.yaml');
|
||||||
|
```
|
||||||
|
|
||||||
|
or (if you prefer functional syntax)
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
require_once "spyc.php";
|
||||||
|
$Data = spyc_load_file('spyc.yaml');
|
||||||
|
```
|
||||||
|
|
||||||
|
## Donations, anyone?
|
||||||
|
|
||||||
|
If you find Spyc useful, I'm accepting Bitcoin donations (who doesn't these days?) at 193bEkLP7zMrNLZm9UdUet4puGD5mQiLai
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"name": "mustangostang/spyc",
|
||||||
|
"description": "A simple YAML loader/dumper class for PHP",
|
||||||
|
"type": "library",
|
||||||
|
"keywords": [
|
||||||
|
"spyc",
|
||||||
|
"yaml",
|
||||||
|
"yml"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/mustangostang/spyc/",
|
||||||
|
"authors" : [{
|
||||||
|
"name": "mustangostang",
|
||||||
|
"email": "vlad.andersen@gmail.com"
|
||||||
|
}],
|
||||||
|
"license": "MIT",
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.1"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [ "Spyc.php" ]
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "4.3.*@dev"
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "0.5.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
#
|
||||||
|
# S P Y C
|
||||||
|
# a simple php yaml class
|
||||||
|
#
|
||||||
|
# Feel free to dump an array to YAML, and then to load that YAML back into an
|
||||||
|
# array. This is a good way to test the limitations of the parser and maybe
|
||||||
|
# learn some basic YAML.
|
||||||
|
#
|
||||||
|
|
||||||
|
include('../Spyc.php');
|
||||||
|
|
||||||
|
$array[] = 'Sequence item';
|
||||||
|
$array['The Key'] = 'Mapped value';
|
||||||
|
$array[] = array('A sequence','of a sequence');
|
||||||
|
$array[] = array('first' => 'A sequence','second' => 'of mapped values');
|
||||||
|
$array['Mapped'] = array('A sequence','which is mapped');
|
||||||
|
$array['A Note'] = 'What if your text is too long?';
|
||||||
|
$array['Another Note'] = 'If that is the case, the dumper will probably fold your text by using a block. Kinda like this.';
|
||||||
|
$array['The trick?'] = 'The trick is that we overrode the default indent, 2, to 4 and the default wordwrap, 40, to 60.';
|
||||||
|
$array['Old Dog'] = "And if you want\n to preserve line breaks, \ngo ahead!";
|
||||||
|
$array['key:withcolon'] = "Should support this to";
|
||||||
|
|
||||||
|
$yaml = Spyc::YAMLDump($array,4,60);
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
#
|
||||||
|
# S P Y C
|
||||||
|
# a simple php yaml class
|
||||||
|
#
|
||||||
|
# license: [MIT License, http://www.opensource.org/licenses/mit-license.php]
|
||||||
|
#
|
||||||
|
|
||||||
|
include('../Spyc.php');
|
||||||
|
|
||||||
|
$array = Spyc::YAMLLoad('../spyc.yaml');
|
||||||
|
|
||||||
|
echo '<pre><a href="spyc.yaml">spyc.yaml</a> loaded into PHP:<br/>';
|
||||||
|
print_r($array);
|
||||||
|
echo '</pre>';
|
||||||
|
|
||||||
|
|
||||||
|
echo '<pre>YAML Data dumped back:<br/>';
|
||||||
|
echo Spyc::YAMLDump($array);
|
||||||
|
echo '</pre>';
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
php5to4 ("../spyc.php", 'spyc-latest.php4');
|
||||||
|
|
||||||
|
function php5to4 ($src, $dest) {
|
||||||
|
$code = file_get_contents ($src);
|
||||||
|
$code = preg_replace ('#(public|private|protected)\s+\$#i', 'var \$', $code);
|
||||||
|
$code = preg_replace ('#(public|private|protected)\s+static\s+\$#i', 'var \$', $code);
|
||||||
|
$code = preg_replace ('#(public|private|protected)\s+function#i', 'function', $code);
|
||||||
|
$code = preg_replace ('#(public|private|protected)\s+static\s+function#i', 'function', $code);
|
||||||
|
$code = preg_replace ('#throw new Exception\\(([^)]*)\\)#i', 'trigger_error($1,E_USER_ERROR)', $code);
|
||||||
|
$code = str_replace ('self::', '$this->', $code);
|
||||||
|
$f = fopen ($dest, 'w');
|
||||||
|
fwrite($f, $code);
|
||||||
|
fclose ($f);
|
||||||
|
print "Written to $dest.\n";
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,162 @@
|
||||||
|
<?php
|
||||||
|
#
|
||||||
|
# S P Y C
|
||||||
|
# a simple php yaml class
|
||||||
|
# v0.3
|
||||||
|
#
|
||||||
|
# author: [chris wanstrath, chris@ozmm.org]
|
||||||
|
# websites: [http://www.yaml.org, http://spyc.sourceforge.net/]
|
||||||
|
# license: [MIT License, http://www.opensource.org/licenses/mit-license.php]
|
||||||
|
# copyright: (c) 2005-2006 Chris Wanstrath
|
||||||
|
#
|
||||||
|
# We're gonna load a file into memory and see if we get what we expect.
|
||||||
|
# If not, we're gonna complain.
|
||||||
|
#
|
||||||
|
# Pretty lo-fi. Let's see if we can't get some unit testing going in the next,
|
||||||
|
# I dunno, 20 months? Alright. Go team.
|
||||||
|
#
|
||||||
|
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
include('spyc.php4');
|
||||||
|
|
||||||
|
$yaml = Spyc::YAMLLoad('../spyc.yaml');
|
||||||
|
|
||||||
|
// print_r ($yaml);
|
||||||
|
|
||||||
|
# Added in .2
|
||||||
|
if ($yaml[1040] != "Ooo, a numeric key!")
|
||||||
|
die('Key: 1040 failed');
|
||||||
|
|
||||||
|
# Test mappings / types
|
||||||
|
if ($yaml['String'] != "Anyone's name, really.")
|
||||||
|
die('Key: String failed');
|
||||||
|
|
||||||
|
if ($yaml['Int'] !== 13)
|
||||||
|
die('Key: Int failed');
|
||||||
|
|
||||||
|
if ($yaml['True'] !== true)
|
||||||
|
die('Key: True failed');
|
||||||
|
|
||||||
|
if ($yaml['False'] !== false)
|
||||||
|
die('Key: False failed');
|
||||||
|
|
||||||
|
if ($yaml['Zero'] !== 0)
|
||||||
|
die('Key: Zero failed');
|
||||||
|
|
||||||
|
if (isset($yaml['Null']))
|
||||||
|
die('Key: Null failed');
|
||||||
|
|
||||||
|
if ($yaml['Float'] !== 5.34)
|
||||||
|
die('Key: Float failed');
|
||||||
|
|
||||||
|
|
||||||
|
# Test sequences
|
||||||
|
if ($yaml[0] != "PHP Class")
|
||||||
|
die('Sequence 0 failed');
|
||||||
|
|
||||||
|
if ($yaml[1] != "Basic YAML Loader")
|
||||||
|
die('Sequence 1 failed');
|
||||||
|
|
||||||
|
if ($yaml[2] != "Very Basic YAML Dumper")
|
||||||
|
die('Sequence 2 failed');
|
||||||
|
|
||||||
|
# A sequence of a sequence
|
||||||
|
if ($yaml[3] != array("YAML is so easy to learn.",
|
||||||
|
"Your config files will never be the same."))
|
||||||
|
die('Sequence 3 failed');
|
||||||
|
|
||||||
|
# Sequence of mappings
|
||||||
|
if ($yaml[4] != array("cpu" => "1.5ghz", "ram" => "1 gig",
|
||||||
|
"os" => "os x 10.4.1"))
|
||||||
|
die('Sequence 4 failed');
|
||||||
|
|
||||||
|
# Mapped sequence
|
||||||
|
if ($yaml['domains'] != array("yaml.org", "php.net"))
|
||||||
|
die("Key: 'domains' failed");
|
||||||
|
|
||||||
|
# A sequence like this.
|
||||||
|
if ($yaml[5] != array("program" => "Adium", "platform" => "OS X",
|
||||||
|
"type" => "Chat Client"))
|
||||||
|
die('Sequence 5 failed');
|
||||||
|
|
||||||
|
# A folded block as a mapped value
|
||||||
|
if ($yaml['no time'] != "There isn't any time for your tricks!\nDo you understand?")
|
||||||
|
die("Key: 'no time' failed");
|
||||||
|
|
||||||
|
# A literal block as a mapped value
|
||||||
|
if ($yaml['some time'] != "There is nothing but time\nfor your tricks.")
|
||||||
|
die("Key: 'some time' failed");
|
||||||
|
|
||||||
|
# Crazy combinations
|
||||||
|
if ($yaml['databases'] != array( array("name" => "spartan", "notes" =>
|
||||||
|
array( "Needs to be backed up",
|
||||||
|
"Needs to be normalized" ),
|
||||||
|
"type" => "mysql" )))
|
||||||
|
die("Key: 'databases' failed");
|
||||||
|
|
||||||
|
# You can be a bit tricky
|
||||||
|
if ($yaml["if: you'd"] != "like")
|
||||||
|
die("Key: 'if: you\'d' failed");
|
||||||
|
|
||||||
|
# Inline sequences
|
||||||
|
if ($yaml[6] != array("One", "Two", "Three", "Four"))
|
||||||
|
die("Sequence 6 failed");
|
||||||
|
|
||||||
|
# Nested Inline Sequences
|
||||||
|
if ($yaml[7] != array("One", array("Two", "And", "Three"), "Four", "Five"))
|
||||||
|
die("Sequence 7 failed");
|
||||||
|
|
||||||
|
# Nested Nested Inline Sequences
|
||||||
|
if ($yaml[8] != array( "This", array("Is", "Getting", array("Ridiculous", "Guys")),
|
||||||
|
"Seriously", array("Show", "Mercy")))
|
||||||
|
die("Sequence 8 failed");
|
||||||
|
|
||||||
|
# Inline mappings
|
||||||
|
if ($yaml[9] != array("name" => "chris", "age" => "young", "brand" => "lucky strike"))
|
||||||
|
die("Sequence 9 failed");
|
||||||
|
|
||||||
|
# Nested inline mappings
|
||||||
|
if ($yaml[10] != array("name" => "mark", "age" => "older than chris",
|
||||||
|
"brand" => array("marlboro", "lucky strike")))
|
||||||
|
die("Sequence 10 failed");
|
||||||
|
|
||||||
|
# References -- they're shaky, but functional
|
||||||
|
if ($yaml['dynamic languages'] != array('Perl', 'Python', 'PHP', 'Ruby'))
|
||||||
|
die("Key: 'dynamic languages' failed");
|
||||||
|
|
||||||
|
if ($yaml['compiled languages'] != array('C/C++', 'Java'))
|
||||||
|
die("Key: 'compiled languages' failed");
|
||||||
|
|
||||||
|
if ($yaml['all languages'] != array(
|
||||||
|
array('Perl', 'Python', 'PHP', 'Ruby'),
|
||||||
|
array('C/C++', 'Java')
|
||||||
|
))
|
||||||
|
die("Key: 'all languages' failed");
|
||||||
|
|
||||||
|
# Added in .2.2: Escaped quotes
|
||||||
|
if ($yaml[11] != "you know, this shouldn't work. but it does.")
|
||||||
|
die("Sequence 11 failed.");
|
||||||
|
|
||||||
|
if ($yaml[12] != "that's my value.")
|
||||||
|
die("Sequence 12 failed.");
|
||||||
|
|
||||||
|
if ($yaml[13] != "again, that's my value.")
|
||||||
|
die("Sequence 13 failed.");
|
||||||
|
|
||||||
|
if ($yaml[14] != "here's to \"quotes\", boss.")
|
||||||
|
die("Sequence 14 failed.");
|
||||||
|
|
||||||
|
if ($yaml[15] != array( 'name' => "Foo, Bar's", 'age' => 20))
|
||||||
|
die("Sequence 15 failed.");
|
||||||
|
|
||||||
|
if ($yaml[16] != array( 0 => "a", 1 => array (0 => 1, 1 => 2), 2 => "b"))
|
||||||
|
die("Sequence 16 failed.");
|
||||||
|
|
||||||
|
if ($yaml['endloop'] != "Does this line in the end indeed make Spyc go to an infinite loop?")
|
||||||
|
die("[endloop] failed.");
|
||||||
|
|
||||||
|
|
||||||
|
print "spyc.yaml parsed correctly\n";
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<phpunit colors="true" bootstrap="vendor/autoload.php">
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="all">
|
||||||
|
<directory suffix="Test.php">tests/</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
</phpunit>
|
|
@ -0,0 +1,219 @@
|
||||||
|
#
|
||||||
|
# S P Y C
|
||||||
|
# a simple php yaml class
|
||||||
|
#
|
||||||
|
# authors: [vlad andersen (vlad.andersen@gmail.com), chris wanstrath (chris@ozmm.org)]
|
||||||
|
# websites: [http://www.yaml.org, http://spyc.sourceforge.net/]
|
||||||
|
# license: [MIT License, http://www.opensource.org/licenses/mit-license.php]
|
||||||
|
# copyright: (c) 2005-2006 Chris Wanstrath, 2006-2014 Vlad Andersen
|
||||||
|
#
|
||||||
|
# spyc.yaml - A file containing the YAML that Spyc understands.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Mappings - with proper types
|
||||||
|
String: Anyone's name, really.
|
||||||
|
Int: 13
|
||||||
|
BadHex: f0xf3
|
||||||
|
Hex: 0xf3
|
||||||
|
True: true
|
||||||
|
False: false
|
||||||
|
Zero: 0
|
||||||
|
Null: NULL
|
||||||
|
NotNull: 'null'
|
||||||
|
NotTrue: 'y'
|
||||||
|
NotBoolTrue: 'true'
|
||||||
|
NotInt: '5'
|
||||||
|
Float: 5.34
|
||||||
|
Negative: -90
|
||||||
|
SmallFloat: 0.7
|
||||||
|
NewLine: \n
|
||||||
|
QuotedNewLine: "\n"
|
||||||
|
|
||||||
|
# A sequence
|
||||||
|
- PHP Class
|
||||||
|
- Basic YAML Loader
|
||||||
|
- Very Basic YAML Dumper
|
||||||
|
|
||||||
|
# A sequence of a sequence
|
||||||
|
-
|
||||||
|
- YAML is so easy to learn.
|
||||||
|
- Your config files will never be the same.
|
||||||
|
|
||||||
|
# Sequence of mappings
|
||||||
|
-
|
||||||
|
cpu: 1.5ghz
|
||||||
|
ram: 1 gig
|
||||||
|
os : os x 10.4.1
|
||||||
|
|
||||||
|
# Mapped sequence
|
||||||
|
domains:
|
||||||
|
- yaml.org
|
||||||
|
- php.net
|
||||||
|
|
||||||
|
# A sequence like this.
|
||||||
|
- program: Adium
|
||||||
|
platform: OS X
|
||||||
|
type: Chat Client
|
||||||
|
|
||||||
|
# A folded block as a mapped value
|
||||||
|
no time: >
|
||||||
|
There isn't any time
|
||||||
|
for your tricks!
|
||||||
|
|
||||||
|
Do you understand?
|
||||||
|
|
||||||
|
# A literal block as a mapped value
|
||||||
|
some time: |
|
||||||
|
There is nothing but time
|
||||||
|
for your tricks.
|
||||||
|
|
||||||
|
# Crazy combinations
|
||||||
|
databases:
|
||||||
|
- name: spartan
|
||||||
|
notes:
|
||||||
|
- Needs to be backed up
|
||||||
|
- Needs to be normalized
|
||||||
|
type: mysql
|
||||||
|
|
||||||
|
# You can be a bit tricky
|
||||||
|
"if: you'd": like
|
||||||
|
|
||||||
|
# Inline sequences
|
||||||
|
- [One, Two, Three, Four]
|
||||||
|
|
||||||
|
# Nested Inline Sequences
|
||||||
|
- [One, [Two, And, Three], Four, Five]
|
||||||
|
|
||||||
|
# Nested Nested Inline Sequences
|
||||||
|
- [This, [Is, Getting, [Ridiculous, Guys]], Seriously, [Show, Mercy]]
|
||||||
|
|
||||||
|
# Inline mappings
|
||||||
|
- {name: chris, age: young, brand: lucky strike}
|
||||||
|
|
||||||
|
# Nested inline mappings
|
||||||
|
- {name: mark, age: older than chris, brand: [marlboro, lucky strike]}
|
||||||
|
|
||||||
|
# References -- they're shaky, but functional
|
||||||
|
dynamic languages: &DLANGS
|
||||||
|
- Perl
|
||||||
|
- Python
|
||||||
|
- PHP
|
||||||
|
- Ruby
|
||||||
|
compiled languages: &CLANGS
|
||||||
|
- C/C++
|
||||||
|
- Java
|
||||||
|
all languages:
|
||||||
|
- *DLANGS
|
||||||
|
- *CLANGS
|
||||||
|
|
||||||
|
# Added in .2.2: Escaped quotes
|
||||||
|
- you know, this shouldn't work. but it does.
|
||||||
|
- 'that''s my value.'
|
||||||
|
- 'again, that\'s my value.'
|
||||||
|
- "here's to \"quotes\", boss."
|
||||||
|
|
||||||
|
# added in .2.3
|
||||||
|
- {name: "Foo, Bar's", age: 20}
|
||||||
|
|
||||||
|
# Added in .2.4: bug [ 1418193 ] Quote Values in Nested Arrays
|
||||||
|
- [a, ['1', "2"], b]
|
||||||
|
|
||||||
|
# Add in .5.2: Quoted new line values.
|
||||||
|
- "First line\nSecond line\nThird line"
|
||||||
|
|
||||||
|
# Added in .2.4: malformed YAML
|
||||||
|
all
|
||||||
|
javascripts: [dom1.js, dom.js]
|
||||||
|
|
||||||
|
# Added in .2
|
||||||
|
1040: Ooo, a numeric key! # And working comments? Wow! Colons in comments: a menace (0.3).
|
||||||
|
|
||||||
|
hash_1: Hash #and a comment
|
||||||
|
hash_2: "Hash #and a comment"
|
||||||
|
"hash#3": "Hash (#) can appear in key too"
|
||||||
|
|
||||||
|
float_test: 1.0
|
||||||
|
float_test_with_quotes: '1.0'
|
||||||
|
float_inverse_test: 001
|
||||||
|
|
||||||
|
a_really_large_number: 115792089237316195423570985008687907853269984665640564039457584007913129639936 # 2^256
|
||||||
|
|
||||||
|
int array: [ 1, 2, 3 ]
|
||||||
|
|
||||||
|
array on several lines:
|
||||||
|
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
||||||
|
10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ]
|
||||||
|
|
||||||
|
morelesskey: "<value>"
|
||||||
|
|
||||||
|
array_of_zero: [0]
|
||||||
|
sophisticated_array_of_zero: {rx: {tx: [0]} }
|
||||||
|
|
||||||
|
switches:
|
||||||
|
- { row: 0, col: 0, func: {tx: [0, 1]} }
|
||||||
|
|
||||||
|
empty_sequence: [ ]
|
||||||
|
empty_hash: { }
|
||||||
|
|
||||||
|
special_characters: "[{]]{{]]"
|
||||||
|
|
||||||
|
asterisks: "*"
|
||||||
|
|
||||||
|
empty_key:
|
||||||
|
:
|
||||||
|
key: value
|
||||||
|
|
||||||
|
trailing_colon: "foo:"
|
||||||
|
|
||||||
|
multiline_items:
|
||||||
|
- type: SomeItem
|
||||||
|
values: [blah, blah, blah,
|
||||||
|
blah]
|
||||||
|
ints: [2, 54, 12,
|
||||||
|
2143]
|
||||||
|
|
||||||
|
many_lines: |
|
||||||
|
A quick
|
||||||
|
fox
|
||||||
|
|
||||||
|
|
||||||
|
jumped
|
||||||
|
over
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
a lazy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dog
|
||||||
|
|
||||||
|
|
||||||
|
werte:
|
||||||
|
1: nummer 1
|
||||||
|
0: Stunde 0
|
||||||
|
|
||||||
|
noindent_records:
|
||||||
|
- record1: value1
|
||||||
|
- record2: value2
|
||||||
|
|
||||||
|
"a:1": [1000]
|
||||||
|
"a:2":
|
||||||
|
- 2000
|
||||||
|
a:3: [3000]
|
||||||
|
|
||||||
|
complex_unquoted_key:
|
||||||
|
a:b:''test': value
|
||||||
|
|
||||||
|
array with commas:
|
||||||
|
["0","1"]
|
||||||
|
|
||||||
|
invoice: ["Something", "", '', "Something else"]
|
||||||
|
quotes: ['Something', "Nothing", 'Anything', "Thing"]
|
||||||
|
|
||||||
|
# [Endloop]
|
||||||
|
endloop: |
|
||||||
|
Does this line in the end indeed make Spyc go to an infinite loop?
|
|
@ -0,0 +1,194 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class DumpTest extends PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
|
private $files_to_test = array();
|
||||||
|
|
||||||
|
public function setUp() {
|
||||||
|
$this->files_to_test = array (__DIR__.'/../spyc.yaml', 'failing1.yaml', 'indent_1.yaml', 'quotes.yaml');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testShortSyntax() {
|
||||||
|
$dump = spyc_dump(array ('item1', 'item2', 'item3'));
|
||||||
|
$awaiting = "- item1\n- item2\n- item3\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDump() {
|
||||||
|
foreach ($this->files_to_test as $file) {
|
||||||
|
$yaml = spyc_load(file_get_contents($file));
|
||||||
|
$dump = Spyc::YAMLDump ($yaml);
|
||||||
|
$yaml_after_dump = Spyc::YAMLLoad ($dump);
|
||||||
|
$this->assertEquals ($yaml, $yaml_after_dump);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpWithQuotes() {
|
||||||
|
$Spyc = new Spyc();
|
||||||
|
$Spyc->setting_dump_force_quotes = true;
|
||||||
|
foreach ($this->files_to_test as $file) {
|
||||||
|
$yaml = $Spyc->load(file_get_contents($file));
|
||||||
|
$dump = $Spyc->dump ($yaml);
|
||||||
|
$yaml_after_dump = Spyc::YAMLLoad ($dump);
|
||||||
|
$this->assertEquals ($yaml, $yaml_after_dump);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpArrays() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('item1', 'item2', 'item3'));
|
||||||
|
$awaiting = "---\n- item1\n- item2\n- item3\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNull() {
|
||||||
|
$dump = Spyc::YAMLDump(array('a' => 1, 'b' => null, 'c' => 3));
|
||||||
|
$awaiting = "---\na: 1\nb: null\nc: 3\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNext() {
|
||||||
|
$array = array("aaa", "bbb", "ccc");
|
||||||
|
#set arrays internal pointer to next element
|
||||||
|
next($array);
|
||||||
|
$dump = Spyc::YAMLDump($array);
|
||||||
|
$awaiting = "---\n- aaa\n- bbb\n- ccc\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpingMixedArrays() {
|
||||||
|
$array = array();
|
||||||
|
$array[] = 'Sequence item';
|
||||||
|
$array['The Key'] = 'Mapped value';
|
||||||
|
$array[] = array('A sequence','of a sequence');
|
||||||
|
$array[] = array('first' => 'A sequence','second' => 'of mapped values');
|
||||||
|
$array['Mapped'] = array('A sequence','which is mapped');
|
||||||
|
$array['A Note'] = 'What if your text is too long?';
|
||||||
|
$array['Another Note'] = 'If that is the case, the dumper will probably fold your text by using a block. Kinda like this.';
|
||||||
|
$array['The trick?'] = 'The trick is that we overrode the default indent, 2, to 4 and the default wordwrap, 40, to 60.';
|
||||||
|
$array['Old Dog'] = "And if you want\n to preserve line breaks, \ngo ahead!";
|
||||||
|
$array['key:withcolon'] = "Should support this to";
|
||||||
|
|
||||||
|
$yaml = Spyc::YAMLDump($array,4,60);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMixed() {
|
||||||
|
$dump = Spyc::YAMLDump(array(0 => 1, 'b' => 2, 1 => 3));
|
||||||
|
$awaiting = "---\n0: 1\nb: 2\n1: 3\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpNumerics() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('404', '405', '500'));
|
||||||
|
$awaiting = "---\n- \"404\"\n- \"405\"\n- \"500\"\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpAsterisks() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('*'));
|
||||||
|
$awaiting = "---\n- '*'\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpAmpersands() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('some' => '&foo'));
|
||||||
|
$awaiting = "---\nsome: '&foo'\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpExclamations() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('some' => '!foo'));
|
||||||
|
$awaiting = "---\nsome: '!foo'\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpExclamations2() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('some' => 'foo!'));
|
||||||
|
$awaiting = "---\nsome: foo!\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpApostrophes() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('some' => "'Biz' pimpt bedrijventerreinen"));
|
||||||
|
$awaiting = "---\nsome: \"'Biz' pimpt bedrijventerreinen\"\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDumpNumericHashes() {
|
||||||
|
$dump = Spyc::YAMLDump(array ("titel"=> array("0" => "", 1 => "Dr.", 5 => "Prof.", 6 => "Prof. Dr.")));
|
||||||
|
$awaiting = "---\ntitel:\n 0: \"\"\n 1: Dr.\n 5: Prof.\n 6: Prof. Dr.\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEmpty() {
|
||||||
|
$dump = Spyc::YAMLDump(array("foo" => array()));
|
||||||
|
$awaiting = "---\nfoo: [ ]\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHashesInKeys() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('#color' => '#ffffff'));
|
||||||
|
$awaiting = "---\n\"#color\": '#ffffff'\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testParagraph() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => "|\n value"));
|
||||||
|
$awaiting = "---\nkey: |\n value\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testParagraphTwo() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => 'Congrats, pimpt bedrijventerreinen pimpt bedrijventerreinen pimpt bedrijventerreinen!'));
|
||||||
|
$awaiting = "---\nkey: >\n Congrats, pimpt bedrijventerreinen pimpt\n bedrijventerreinen pimpt\n bedrijventerreinen!\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testString() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => array('key_one' => 'Congrats, pimpt bedrijventerreinen!')));
|
||||||
|
$awaiting = "---\nkey:\n key_one: Congrats, pimpt bedrijventerreinen!\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStringLong() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => array('key_one' => 'Congrats, pimpt bedrijventerreinen pimpt bedrijventerreinen pimpt bedrijventerreinen!')));
|
||||||
|
$awaiting = "---\nkey:\n key_one: >\n Congrats, pimpt bedrijventerreinen pimpt\n bedrijventerreinen pimpt\n bedrijventerreinen!\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStringDoubleQuote() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => array('key_one' => array('key_two' => '"Système d\'e-réservation"'))));
|
||||||
|
$awaiting = "---\nkey:\n key_one:\n key_two: |\n Système d'e-réservation\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testLongStringDoubleQuote() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => array('key_one' => array('key_two' => '"Système d\'e-réservation bedrijventerreinen pimpt" bedrijventerreinen!'))));
|
||||||
|
$awaiting = "---\nkey:\n key_one:\n key_two: |\n \"Système d'e-réservation bedrijventerreinen pimpt\" bedrijventerreinen!\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStringStartingWithSpace() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => array('key_one' => " Congrats, pimpt bedrijventerreinen \n pimpt bedrijventerreinen pimpt bedrijventerreinen!")));
|
||||||
|
$awaiting = "---\nkey:\n key_one: |\n Congrats, pimpt bedrijventerreinen\n pimpt bedrijventerreinen pimpt bedrijventerreinen!\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPerCentOne() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => "%name%, pimpts bedrijventerreinen!"));
|
||||||
|
$awaiting = "---\nkey: '%name%, pimpts bedrijventerreinen!'\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPerCentAndSimpleQuote() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => "%name%, pimpt's bedrijventerreinen!"));
|
||||||
|
$awaiting = "---\nkey: \"%name%, pimpt's bedrijventerreinen!\"\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPerCentAndDoubleQuote() {
|
||||||
|
$dump = Spyc::YAMLDump(array ('key' => '%name%, pimpt\'s "bed"rijventerreinen!'));
|
||||||
|
$awaiting = "---\nkey: |\n %name%, pimpt's \"bed\"rijventerreinen!\n";
|
||||||
|
$this->assertEquals ($awaiting, $dump);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class IndentTest extends PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
|
protected $Y;
|
||||||
|
|
||||||
|
protected function setUp() {
|
||||||
|
$this->Y = Spyc::YAMLLoad(__DIR__."/indent_1.yaml");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIndent_1() {
|
||||||
|
$this->assertEquals (array ('child_1' => 2, 'child_2' => 0, 'child_3' => 1), $this->Y['root']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIndent_2() {
|
||||||
|
$this->assertEquals (array ('child_1' => 1, 'child_2' => 2), $this->Y['root2']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIndent_3() {
|
||||||
|
$this->assertEquals (array (array ('resolutions' => array (1024 => 768, 1920 => 1200), 'producer' => 'Nec')), $this->Y['display']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIndent_4() {
|
||||||
|
$this->assertEquals (array (
|
||||||
|
array ('resolutions' => array (1024 => 768)),
|
||||||
|
array ('resolutions' => array (1920 => 1200)),
|
||||||
|
), $this->Y['displays']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIndent_5() {
|
||||||
|
$this->assertEquals (array (array (
|
||||||
|
'row' => 0,
|
||||||
|
'col' => 0,
|
||||||
|
'headsets_affected' => array (
|
||||||
|
array (
|
||||||
|
'ports' => array (0),
|
||||||
|
'side' => 'left',
|
||||||
|
)
|
||||||
|
),
|
||||||
|
'switch_function' => array (
|
||||||
|
'ics_ptt' => true
|
||||||
|
)
|
||||||
|
)), $this->Y['nested_hashes_and_seqs']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIndent_6() {
|
||||||
|
$this->assertEquals (array (
|
||||||
|
'h' => array (
|
||||||
|
array ('a' => 'b', 'a1' => 'b1'),
|
||||||
|
array ('c' => 'd')
|
||||||
|
)
|
||||||
|
), $this->Y['easier_nest']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIndent_space() {
|
||||||
|
$this->assertEquals ("By four\n spaces", $this->Y['one_space']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testListAndComment() {
|
||||||
|
$this->assertEquals (array ('one', 'two', 'three'), $this->Y['list_and_comment']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAnchorAndAlias() {
|
||||||
|
$this->assertEquals (array ('database' => 'rails_dev', 'adapter' => 'mysql', 'host' => 'localhost'), $this->Y['development']);
|
||||||
|
$this->assertEquals (array (1 => 'abc'), $this->Y['zzz']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class LoadTest extends PHPUnit_Framework_TestCase {
|
||||||
|
public function testQuotes() {
|
||||||
|
$test_values = array(
|
||||||
|
"adjacent '''' \"\"\"\" quotes.",
|
||||||
|
"adjacent '''' quotes.",
|
||||||
|
"adjacent \"\"\"\" quotes.",
|
||||||
|
);
|
||||||
|
foreach($test_values as $value) {
|
||||||
|
$yaml = array($value);
|
||||||
|
$dump = Spyc::YAMLDump ($yaml);
|
||||||
|
$yaml_loaded = Spyc::YAMLLoad ($dump);
|
||||||
|
$this->assertEquals ($yaml, $yaml_loaded);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,413 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class ParseTest extends PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
|
protected $yaml;
|
||||||
|
|
||||||
|
protected function setUp() {
|
||||||
|
$this->yaml = spyc_load_file(__DIR__.'/../spyc.yaml');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMergeHashKeys() {
|
||||||
|
$Expected = array (
|
||||||
|
array ('step' => array('instrument' => 'Lasik 2000', 'pulseEnergy' => 5.4, 'pulseDuration' => 12, 'repetition' => 1000, 'spotSize' => '1mm')),
|
||||||
|
array ('step' => array('instrument' => 'Lasik 2000', 'pulseEnergy' => 5.4, 'pulseDuration' => 12, 'repetition' => 1000, 'spotSize' => '2mm')),
|
||||||
|
);
|
||||||
|
$Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
|
||||||
|
$this->assertEquals ($Expected, $Actual['steps']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeathMasks() {
|
||||||
|
$Expected = array ('sad' => 2, 'magnificent' => 4);
|
||||||
|
$Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
|
||||||
|
$this->assertEquals ($Expected, $Actual['death masks are']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDevDb() {
|
||||||
|
$Expected = array ('adapter' => 'mysql', 'host' => 'localhost', 'database' => 'rails_dev');
|
||||||
|
$Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
|
||||||
|
$this->assertEquals ($Expected, $Actual['development']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNumericKey() {
|
||||||
|
$this->assertEquals ("Ooo, a numeric key!", $this->yaml[1040]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsString() {
|
||||||
|
$this->assertEquals ("Anyone's name, really.", $this->yaml['String']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsInt() {
|
||||||
|
$this->assertSame (13, $this->yaml['Int']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsHex() {
|
||||||
|
$this->assertSame (243, $this->yaml['Hex']);
|
||||||
|
$this->assertSame ('f0xf3', $this->yaml['BadHex']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsBooleanTrue() {
|
||||||
|
$this->assertSame (true, $this->yaml['True']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsBooleanFalse() {
|
||||||
|
$this->assertSame (false, $this->yaml['False']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsZero() {
|
||||||
|
$this->assertSame (0, $this->yaml['Zero']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsNull() {
|
||||||
|
$this->assertSame (null, $this->yaml['Null']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsNotNull() {
|
||||||
|
$this->assertSame ('null', $this->yaml['NotNull']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsFloat() {
|
||||||
|
$this->assertSame (5.34, $this->yaml['Float']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsNegative() {
|
||||||
|
$this->assertSame (-90, $this->yaml['Negative']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappingsSmallFloat() {
|
||||||
|
$this->assertSame (0.7, $this->yaml['SmallFloat']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNewline() {
|
||||||
|
$this->assertSame ('\n', $this->yaml['NewLine']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQuotedNewline() {
|
||||||
|
$this->assertSame ("\n", $this->yaml['QuotedNewLine']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSeq0() {
|
||||||
|
$this->assertEquals ("PHP Class", $this->yaml[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSeq1() {
|
||||||
|
$this->assertEquals ("Basic YAML Loader", $this->yaml[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSeq2() {
|
||||||
|
$this->assertEquals ("Very Basic YAML Dumper", $this->yaml[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSeq3() {
|
||||||
|
$this->assertEquals (array("YAML is so easy to learn.",
|
||||||
|
"Your config files will never be the same."), $this->yaml[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSeqMap() {
|
||||||
|
$this->assertEquals (array("cpu" => "1.5ghz", "ram" => "1 gig",
|
||||||
|
"os" => "os x 10.4.1"), $this->yaml[4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMappedSequence() {
|
||||||
|
$this->assertEquals (array("yaml.org", "php.net"), $this->yaml['domains']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAnotherSequence() {
|
||||||
|
$this->assertEquals (array("program" => "Adium", "platform" => "OS X",
|
||||||
|
"type" => "Chat Client"), $this->yaml[5]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFoldedBlock() {
|
||||||
|
$this->assertEquals ("There isn't any time for your tricks!\nDo you understand?", $this->yaml['no time']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testLiteralAsMapped() {
|
||||||
|
$this->assertEquals ("There is nothing but time\nfor your tricks.", $this->yaml['some time']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCrazy() {
|
||||||
|
$this->assertEquals (array( array("name" => "spartan", "notes" =>
|
||||||
|
array( "Needs to be backed up",
|
||||||
|
"Needs to be normalized" ),
|
||||||
|
"type" => "mysql" )), $this->yaml['databases']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testColons() {
|
||||||
|
$this->assertEquals ("like", $this->yaml["if: you'd"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInline() {
|
||||||
|
$this->assertEquals (array("One", "Two", "Three", "Four"), $this->yaml[6]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNestedInline() {
|
||||||
|
$this->assertEquals (array("One", array("Two", "And", "Three"), "Four", "Five"), $this->yaml[7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNestedNestedInline() {
|
||||||
|
$this->assertEquals (array( "This", array("Is", "Getting", array("Ridiculous", "Guys")),
|
||||||
|
"Seriously", array("Show", "Mercy")), $this->yaml[8]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInlineMappings() {
|
||||||
|
$this->assertEquals (array("name" => "chris", "age" => "young", "brand" => "lucky strike"), $this->yaml[9]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNestedInlineMappings() {
|
||||||
|
$this->assertEquals (array("name" => "mark", "age" => "older than chris",
|
||||||
|
"brand" => array("marlboro", "lucky strike")), $this->yaml[10]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReferences() {
|
||||||
|
$this->assertEquals (array('Perl', 'Python', 'PHP', 'Ruby'), $this->yaml['dynamic languages']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReferences2() {
|
||||||
|
$this->assertEquals (array('C/C++', 'Java'), $this->yaml['compiled languages']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReferences3() {
|
||||||
|
$this->assertEquals (array(
|
||||||
|
array('Perl', 'Python', 'PHP', 'Ruby'),
|
||||||
|
array('C/C++', 'Java')
|
||||||
|
), $this->yaml['all languages']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEscapedQuotes() {
|
||||||
|
$this->assertEquals ("you know, this shouldn't work. but it does.", $this->yaml[11]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEscapedQuotes_2() {
|
||||||
|
$this->assertEquals ( "that's my value.", $this->yaml[12]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEscapedQuotes_3() {
|
||||||
|
$this->assertEquals ("again, that's my value.", $this->yaml[13]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQuotes() {
|
||||||
|
$this->assertEquals ("here's to \"quotes\", boss.", $this->yaml[14]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQuoteSequence() {
|
||||||
|
$this->assertEquals ( array( 'name' => "Foo, Bar's", 'age' => 20), $this->yaml[15]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testShortSequence() {
|
||||||
|
$this->assertEquals (array( 0 => "a", 1 => array (0 => 1, 1 => 2), 2 => "b"), $this->yaml[16]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQuotedNewlines() {
|
||||||
|
$this->assertEquals ("First line\nSecond line\nThird line", $this->yaml[17]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHash_1() {
|
||||||
|
$this->assertEquals ("Hash", $this->yaml['hash_1']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHash_2() {
|
||||||
|
$this->assertEquals ('Hash #and a comment', $this->yaml['hash_2']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHash_3() {
|
||||||
|
$this->assertEquals ('Hash (#) can appear in key too', $this->yaml['hash#3']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEndloop() {
|
||||||
|
$this->assertEquals ("Does this line in the end indeed make Spyc go to an infinite loop?", $this->yaml['endloop']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReallyLargeNumber() {
|
||||||
|
$this->assertEquals ('115792089237316195423570985008687907853269984665640564039457584007913129639936', $this->yaml['a_really_large_number']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFloatWithZeros() {
|
||||||
|
$this->assertSame ('1.0', $this->yaml['float_test']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFloatWithQuotes() {
|
||||||
|
$this->assertSame ('1.0', $this->yaml['float_test_with_quotes']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFloatInverse() {
|
||||||
|
$this->assertEquals ('001', $this->yaml['float_inverse_test']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIntArray() {
|
||||||
|
$this->assertEquals (array (1, 2, 3), $this->yaml['int array']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testArrayOnSeveralLines() {
|
||||||
|
$this->assertEquals (array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19), $this->yaml['array on several lines']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testArrayWithCommas() {
|
||||||
|
$this->assertEquals(array (0, 1), $this->yaml['array with commas']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testmoreLessKey() {
|
||||||
|
$this->assertEquals ('<value>', $this->yaml['morelesskey']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testArrayOfZero() {
|
||||||
|
$this->assertSame (array(0), $this->yaml['array_of_zero']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSophisticatedArrayOfZero() {
|
||||||
|
$this->assertSame (array('rx' => array ('tx' => array (0))), $this->yaml['sophisticated_array_of_zero']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSwitches() {
|
||||||
|
$this->assertEquals (array (array ('row' => 0, 'col' => 0, 'func' => array ('tx' => array(0, 1)))), $this->yaml['switches']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEmptySequence() {
|
||||||
|
$this->assertSame (array(), $this->yaml['empty_sequence']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEmptyHash() {
|
||||||
|
$this->assertSame (array(), $this->yaml['empty_hash']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEmptykey() {
|
||||||
|
$this->assertSame (array('' => array ('key' => 'value')), $this->yaml['empty_key']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMultilines() {
|
||||||
|
$this->assertSame (array(array('type' => 'SomeItem', 'values' => array ('blah', 'blah', 'blah', 'blah'), 'ints' => array(2, 54, 12, 2143))), $this->yaml['multiline_items']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testManyNewlines() {
|
||||||
|
$this->assertSame ('A quick
|
||||||
|
fox
|
||||||
|
|
||||||
|
|
||||||
|
jumped
|
||||||
|
over
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
a lazy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dog', $this->yaml['many_lines']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWerte() {
|
||||||
|
$this->assertSame (array ('1' => 'nummer 1', '0' => 'Stunde 0'), $this->yaml['werte']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* public function testNoIndent() {
|
||||||
|
$this->assertSame (array(
|
||||||
|
array ('record1'=>'value1'),
|
||||||
|
array ('record2'=>'value2')
|
||||||
|
)
|
||||||
|
, $this->yaml['noindent_records']);
|
||||||
|
} */
|
||||||
|
|
||||||
|
public function testColonsInKeys() {
|
||||||
|
$this->assertSame (array (1000), $this->yaml['a:1']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testColonsInKeys2() {
|
||||||
|
$this->assertSame (array (2000), $this->yaml['a:2']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUnquotedColonsInKeys() {
|
||||||
|
$this->assertSame (array (3000), $this->yaml['a:3']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testComplicatedKeyWithColon() {
|
||||||
|
$this->assertSame(array("a:b:''test'" => 'value'), $this->yaml['complex_unquoted_key']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testKeysInMappedValueException() {
|
||||||
|
$this->setExpectedException('Exception');
|
||||||
|
Spyc::YAMLLoad('x: y: z:');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testKeysInValueException() {
|
||||||
|
$this->setExpectedException('Exception');
|
||||||
|
Spyc::YAMLLoad('x: y: z');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSpecialCharacters() {
|
||||||
|
$this->assertSame ('[{]]{{]]', $this->yaml['special_characters']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAngleQuotes() {
|
||||||
|
$Quotes = Spyc::YAMLLoad(__DIR__.'/quotes.yaml');
|
||||||
|
$this->assertEquals (array ('html_tags' => array ('<br>', '<p>'), 'html_content' => array ('<p>hello world</p>', 'hello<br>world'), 'text_content' => array ('hello world')),
|
||||||
|
$Quotes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFailingColons() {
|
||||||
|
$Failing = Spyc::YAMLLoad(__DIR__.'/failing1.yaml');
|
||||||
|
$this->assertSame (array ('MyObject' => array ('Prop1' => array ('key1:val1'))),
|
||||||
|
$Failing);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQuotesWithComments() {
|
||||||
|
$Expected = 'bar';
|
||||||
|
$Actual = spyc_load_file (__DIR__.'/comments.yaml');
|
||||||
|
$this->assertEquals ($Expected, $Actual['foo']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testArrayWithComments() {
|
||||||
|
$Expected = array ('x', 'y', 'z');
|
||||||
|
$Actual = spyc_load_file (__DIR__.'/comments.yaml');
|
||||||
|
$this->assertEquals ($Expected, $Actual['arr']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAfterArrayWithKittens() {
|
||||||
|
$Expected = 'kittens';
|
||||||
|
$Actual = spyc_load_file (__DIR__.'/comments.yaml');
|
||||||
|
$this->assertEquals ($Expected, $Actual['bar']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Plain characters http://www.yaml.org/spec/1.2/spec.html#id2789510
|
||||||
|
public function testKai() {
|
||||||
|
$Expected = array('-example' => 'value');
|
||||||
|
$Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
|
||||||
|
$this->assertEquals ($Expected, $Actual['kai']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testKaiList() {
|
||||||
|
$Expected = array ('-item', '-item', '-item');
|
||||||
|
$Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
|
||||||
|
$this->assertEquals ($Expected, $Actual['kai_list_of_items']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDifferentQuoteTypes() {
|
||||||
|
$expected = array ('Something', "", "", "Something else");
|
||||||
|
$this->assertSame ($expected, $this->yaml['invoice']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDifferentQuoteTypes2() {
|
||||||
|
$expected = array ('Something', "Nothing", "Anything", "Thing");
|
||||||
|
$this->assertSame ($expected, $this->yaml['quotes']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Separation spaces http://www.yaml.org/spec/1.2/spec.html#id2778394
|
||||||
|
public function testMultipleArrays() {
|
||||||
|
$expected = array(array(array('x')));
|
||||||
|
$this->assertSame($expected, Spyc::YAMLLoad("- - - x"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testElementWithEmptyHash()
|
||||||
|
{
|
||||||
|
$element = "hash: {}\narray: []";
|
||||||
|
$yaml = Spyc::YAMLLoadString($element);
|
||||||
|
$this->assertEquals($yaml['hash'], []);
|
||||||
|
$this->assertEquals($yaml['array'], []);
|
||||||
|
|
||||||
|
$yaml = Spyc::YAMLLoadString($element, [
|
||||||
|
'setting_empty_hash_as_object' => true
|
||||||
|
]);
|
||||||
|
$this->assertInstanceOf(stdClass::class, $yaml['hash']);
|
||||||
|
$this->assertEquals($yaml['array'], []);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
function roundTrip($a) { return Spyc::YAMLLoad(Spyc::YAMLDump(array('x' => $a))); }
|
||||||
|
|
||||||
|
|
||||||
|
class RoundTripTest extends PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
|
protected function setUp() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNull() {
|
||||||
|
$this->assertEquals (array ('x' => null), roundTrip (null));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testY() {
|
||||||
|
$this->assertEquals (array ('x' => 'y'), roundTrip ('y'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testExclam() {
|
||||||
|
$this->assertEquals (array ('x' => '!yeah'), roundTrip ('!yeah'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test5() {
|
||||||
|
$this->assertEquals (array ('x' => '5'), roundTrip ('5'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSpaces() {
|
||||||
|
$this->assertEquals (array ('x' => 'x '), roundTrip ('x '));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testApostrophes() {
|
||||||
|
$this->assertEquals (array ('x' => "'biz'"), roundTrip ("'biz'"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNewLines() {
|
||||||
|
$this->assertEquals (array ('x' => "\n"), roundTrip ("\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHashes() {
|
||||||
|
$this->assertEquals (array ('x' => array ("#color" => '#fff')), roundTrip (array ("#color" => '#fff')));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPreserveString() {
|
||||||
|
$result1 = roundTrip ('0');
|
||||||
|
$result2 = roundTrip ('true');
|
||||||
|
$this->assertTrue (is_string ($result1['x']));
|
||||||
|
$this->assertTrue (is_string ($result2['x']));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPreserveBool() {
|
||||||
|
$result = roundTrip (true);
|
||||||
|
$this->assertTrue (is_bool ($result['x']));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPreserveInteger() {
|
||||||
|
$result = roundTrip (0);
|
||||||
|
$this->assertTrue (is_int ($result['x']));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWordWrap() {
|
||||||
|
$this->assertEquals (array ('x' => "aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), roundTrip ("aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testABCD() {
|
||||||
|
$this->assertEquals (array ('a', 'b', 'c', 'd'), Spyc::YAMLLoad(Spyc::YAMLDump(array('a', 'b', 'c', 'd'))));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testABCD2() {
|
||||||
|
$a = array('a', 'b', 'c', 'd'); // Create a simple list
|
||||||
|
$b = Spyc::YAMLDump($a); // Dump the list as YAML
|
||||||
|
$c = Spyc::YAMLLoad($b); // Load the dumped YAML
|
||||||
|
$d = Spyc::YAMLDump($c); // Re-dump the data
|
||||||
|
$this->assertSame($b, $d);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
foo: 'bar' #Comment
|
||||||
|
arr: ['x', 'y', 'z'] # Comment here
|
||||||
|
bar: kittens
|
|
@ -0,0 +1,2 @@
|
||||||
|
MyObject:
|
||||||
|
Prop1: {key1:val1}
|
|
@ -0,0 +1,70 @@
|
||||||
|
root:
|
||||||
|
child_1: 2
|
||||||
|
|
||||||
|
child_2: 0
|
||||||
|
child_3: 1
|
||||||
|
|
||||||
|
root2:
|
||||||
|
child_1: 1
|
||||||
|
# A comment
|
||||||
|
child_2: 2
|
||||||
|
|
||||||
|
displays:
|
||||||
|
- resolutions:
|
||||||
|
1024: 768
|
||||||
|
- resolutions:
|
||||||
|
1920: 1200
|
||||||
|
|
||||||
|
display:
|
||||||
|
- resolutions:
|
||||||
|
1024: 768
|
||||||
|
1920: 1200
|
||||||
|
producer: "Nec"
|
||||||
|
|
||||||
|
nested_hashes_and_seqs:
|
||||||
|
- { row: 0, col: 0, headsets_affected: [{ports: [0], side: left}], switch_function: {ics_ptt: true} }
|
||||||
|
|
||||||
|
easier_nest: { h: [{a: b, a1: b1}, {c: d}] }
|
||||||
|
|
||||||
|
one_space: |
|
||||||
|
By four
|
||||||
|
spaces
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- step: &id001
|
||||||
|
instrument: Lasik 2000
|
||||||
|
pulseEnergy: 5.4
|
||||||
|
pulseDuration: 12
|
||||||
|
repetition: 1000
|
||||||
|
spotSize: 1mm
|
||||||
|
- step:
|
||||||
|
<<: *id001
|
||||||
|
spotSize: 2mm
|
||||||
|
|
||||||
|
death masks are:
|
||||||
|
sad: 2
|
||||||
|
<<: {magnificent: 4}
|
||||||
|
|
||||||
|
login: &login
|
||||||
|
adapter: mysql
|
||||||
|
host: localhost
|
||||||
|
|
||||||
|
development:
|
||||||
|
database: rails_dev
|
||||||
|
<<: *login
|
||||||
|
|
||||||
|
"key": "value:"
|
||||||
|
colon_only: ":"
|
||||||
|
|
||||||
|
list_and_comment: [one, two, three] # comment
|
||||||
|
kai:
|
||||||
|
-example: value
|
||||||
|
kai_list_of_items:
|
||||||
|
- -item
|
||||||
|
- '-item'
|
||||||
|
-item
|
||||||
|
|
||||||
|
&foo bar:
|
||||||
|
1: "abc"
|
||||||
|
|
||||||
|
zzz: *foo
|
|
@ -0,0 +1,8 @@
|
||||||
|
html_tags:
|
||||||
|
- <br>
|
||||||
|
- <p>
|
||||||
|
html_content:
|
||||||
|
- <p>hello world</p>
|
||||||
|
- hello<br>world
|
||||||
|
text_content:
|
||||||
|
- hello world
|
|
@ -224,6 +224,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.rspamd.inc.php';
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.tls_policy_maps.inc.php';
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.tls_policy_maps.inc.php';
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.fail2ban.inc.php';
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.fail2ban.inc.php';
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.docker.inc.php';
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.docker.inc.php';
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.presets.inc.php';
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/init_db.inc.php';
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/init_db.inc.php';
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.inc.php';
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.inc.php';
|
||||||
init_db_schema();
|
init_db_schema();
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
headline: lang.rsettings_preset_1
|
||||||
|
content: |
|
||||||
|
priority = 10;
|
||||||
|
authenticated = yes;
|
||||||
|
apply "default" {
|
||||||
|
symbols_enabled = ["DKIM_SIGNED", "RATELIMITED", "RATELIMIT_UPDATE", "RATELIMIT_CHECK", "DYN_RL_CHECK", "HISTORY_SAVE", "MILTER_HEADERS", "ARC_SIGNED"];
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
headline: lang.rsettings_preset_2
|
||||||
|
content: |
|
||||||
|
priority = 10;
|
||||||
|
rcpt = "/postmaster@.*/";
|
||||||
|
want_spam = yes;
|
|
@ -0,0 +1,7 @@
|
||||||
|
headline: lang.sieve_preset_1
|
||||||
|
content: |
|
||||||
|
if header :contains "x-attached"
|
||||||
|
[".exe",".bat",".js",".com",".cmd",".ini",".dll",".bas",".cpl",".drv",".inf",".sys",".pif",".doc",".docx"] {
|
||||||
|
discard;
|
||||||
|
stop;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
headline: lang.sieve_preset_2
|
||||||
|
content: |
|
||||||
|
require ["envelope", "imap4flags"];
|
||||||
|
if envelope "from" "mark@me-read.com"
|
||||||
|
{
|
||||||
|
setflag "\\seen";
|
||||||
|
}
|
|
@ -1,20 +1,19 @@
|
||||||
var rspamdPresets = [
|
|
||||||
{
|
|
||||||
description: lang.rsettings_preset_1,
|
|
||||||
codeValue: 'priority = 10;\nauthenticated = yes;\napply "default" {\n symbols_enabled = ["DKIM_SIGNED", "RATELIMITED", "RATELIMIT_UPDATE", "RATELIMIT_CHECK", "DYN_RL_CHECK", "HISTORY_SAVE", "MILTER_HEADERS", "ARC_SIGNED"];\n}'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
description: lang.rsettings_preset_2,
|
|
||||||
codeValue: 'priority = 10;\nrcpt = "/postmaster@.*/";\nwant_spam = yes;'
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
var rspamd_presetsElem = document.getElementById("rspamd_presets");
|
var rspamd_presetsElem = document.getElementById("rspamd_presets");
|
||||||
if (rspamd_presetsElem && rspamdPresets) {
|
|
||||||
|
if (rspamd_presetsElem) {
|
||||||
|
$.ajax({
|
||||||
|
dataType: 'json',
|
||||||
|
url: '/api/v1/get/presets/rspamd',
|
||||||
|
jsonp: false,
|
||||||
|
complete: function (data) {
|
||||||
|
if (data.responseText !== '{}') {
|
||||||
|
var rspamdPresets = JSON.parse(data.responseText);
|
||||||
|
|
||||||
|
if (rspamdPresets) {
|
||||||
rspamd_presetsElem.innerHTML = '';
|
rspamd_presetsElem.innerHTML = '';
|
||||||
rspamdPresets.forEach(function (item, index) {
|
rspamdPresets.forEach(function (item, index) {
|
||||||
var elemID = 'rspamd_preset_' + index;
|
var elemID = 'rspamd_preset_' + index;
|
||||||
rspamd_presetsElem.innerHTML += '<li><a href="#" class="small" id="' + elemID + '">' + lang.rsettings_insert_preset.replace('%s', item.description) + '</a></li>';
|
rspamd_presetsElem.innerHTML += '<li><a href="#" class="small" id="' + elemID + '">' + lang.rsettings_insert_preset.replace('%s', item.headline) + '</a></li>';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
we need to define 0-timeout here, to prevent dom not be ready.
|
we need to define 0-timeout here, to prevent dom not be ready.
|
||||||
|
@ -22,11 +21,14 @@ if (rspamd_presetsElem && rspamdPresets) {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
document.getElementById(elemID).addEventListener('click', function (e) {
|
document.getElementById(elemID).addEventListener('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
document.querySelector('form[data-id=rsetting] #adminRspamdSettingsDesc').value = item.description;
|
document.querySelector('form[data-id=rsetting] #adminRspamdSettingsDesc').value = item.headline;
|
||||||
document.querySelector('form[data-id=rsetting] #adminRspamdSettingsContent').value = item.codeValue;
|
document.querySelector('form[data-id=rsetting] #adminRspamdSettingsContent').value = item.content;
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}, 0)
|
}, 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
var sieveMailboxPresets = [
|
|
||||||
{
|
|
||||||
description: lang.sieve_preset_1,
|
|
||||||
codeValue: 'if header :contains "x-attached"\n [".exe",".bat",".js",".com",".cmd",".ini",".dll",".bas",".cpl",".drv",".inf",".sys",".pif",".doc",".docx"] {\n discard;\n stop;\n}'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
description: lang.sieve_preset_2,
|
|
||||||
codeValue: 'require ["envelope", "imap4flags"];\nif envelope "from" "mark@me-read.com"\n{\n setflag "\\\\seen";\n}'
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
var sieve_presetsElem = document.getElementById("sieve_presets");
|
var sieve_presetsElem = document.getElementById("sieve_presets");
|
||||||
if (sieve_presetsElem && sieveMailboxPresets) {
|
|
||||||
|
if (sieve_presetsElem) {
|
||||||
|
$.ajax({
|
||||||
|
dataType: 'json',
|
||||||
|
url: '/api/v1/get/presets/sieve',
|
||||||
|
jsonp: false,
|
||||||
|
complete: function (data) {
|
||||||
|
if (data.responseText !== '{}') {
|
||||||
|
var sieveMailboxPresets = JSON.parse(data.responseText);
|
||||||
|
|
||||||
|
if (sieveMailboxPresets) {
|
||||||
sieve_presetsElem.innerHTML = '';
|
sieve_presetsElem.innerHTML = '';
|
||||||
sieveMailboxPresets.forEach(function (item, index) {
|
sieveMailboxPresets.forEach(function (item, index) {
|
||||||
var elemID = 'sieve_preset_' + index;
|
var elemID = 'sieve_preset_' + index;
|
||||||
sieve_presetsElem.innerHTML += '<li><a href="#" class="small" id="' + elemID + '">' + lang.insert_preset.replace('%s', item.description) + '</a></li>';
|
sieve_presetsElem.innerHTML += '<li><a href="#" class="small" id="' + elemID + '">' + lang.insert_preset.replace('%s', item.headline) + '</a></li>';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
we need to define 0-timeout here, to prevent dom not be ready.
|
we need to define 0-timeout here, to prevent dom not be ready.
|
||||||
|
@ -22,10 +21,14 @@ if (sieve_presetsElem && sieveMailboxPresets) {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
document.getElementById(elemID).addEventListener('click', function (e) {
|
document.getElementById(elemID).addEventListener('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
document.querySelector('form[data-id=add_filter] #script_desc').value = item.description;
|
document.querySelector('form[data-id=add_filter] #script_desc').value = item.headline;
|
||||||
document.querySelector('form[data-id=add_filter] #script_data').value = item.codeValue;
|
document.querySelector('form[data-id=add_filter] #script_data').value = item.content;
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}, 0)
|
}, 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1101,6 +1101,17 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "presets":
|
||||||
|
switch ($object) {
|
||||||
|
case "rspamd":
|
||||||
|
process_get_return(presets('get', 'rspamd'));
|
||||||
|
case "sieve":
|
||||||
|
break;
|
||||||
|
process_get_return(presets('get', 'sieve'));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
break;
|
||||||
// return no route found if no case is matched
|
// return no route found if no case is matched
|
||||||
default:
|
default:
|
||||||
http_response_code(404);
|
http_response_code(404);
|
||||||
|
|
Loading…
Reference in New Issue