<?php
namespace Croogo\Core\Test\TestCase;

use Croogo\Core\CroogoJson;
use Croogo\Core\TestSuite\CroogoTestCase;

class CroogoJsonTest extends CroogoTestCase
{

    public $fixtures = [
//      'plugin.Croogo/Settings.Setting',
    ];

    /**
     * testStringify
     */
    public function testStringify()
    {
        $options = 0;
        if (version_compare(PHP_VERSION, '5.3.3', '>=')) {
            $options |= JSON_NUMERIC_CHECK;
        }
        if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
            $options |= JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT;
        }

        $data = [
            'foo' => 'bar',
            'spam' => 'eggs',
        ];
        $expected = <<<END
{
\s+"foo": "bar",
\s+"spam": "eggs"
}
END;
        $result = CroogoJson::stringify($data, $options);
        $this->assertRegExp($expected, $result);

        $data = [
            'name' => 'rchavik/sites',
            'install_count' => 10,
            'numeric_list' => [1, 2, 3],
            'nested' => [
                'hello' => 'world',
                'value' => 20,
            ],
            'combination' => [
                'spam', 'eggs',
                'hello' => 'world',
            ],
        ];
        $expected = <<<END
{
\s+"name": "rchavik\/sites",
\s+"install_count": 10,
\s+"numeric_list": \[
\s+1,
\s+2,
\s+3
\s+\],
\s+"nested": {
\s+"hello": "world",
\s+"value": 20
\s+},
\s+"combination": {
\s+"0": "spam",
\s+"1": "eggs",
\s+"hello": "world"
\s+}
}
END;
        $result = CroogoJson::stringify($data, $options);
        $this->assertRegExp($expected, $result);
    }
}
