Merge pull request #422 from nelmio/bezhermoso-expand_form_type_parser

Unified data types [actualType and subType]
This commit is contained in:
William Durand 2014-06-27 09:54:14 +02:00
commit 03f6142a84
11 changed files with 542 additions and 187 deletions

View File

@ -54,7 +54,7 @@ class Configuration implements ConfigurationInterface
->addDefaultsIfNotSet() ->addDefaultsIfNotSet()
->beforeNormalization() ->beforeNormalization()
->ifString() ->ifString()
->then(function($v) { return array('default_format' => $v); }) ->then(function ($v) { return array('default_format' => $v); })
->end() ->end()
->children() ->children()
->arrayNode('formats') ->arrayNode('formats')

View File

@ -16,6 +16,9 @@ use Symfony\Component\Form\Exception\UnexpectedTypeException;
use Symfony\Component\Form\Exception\InvalidArgumentException; use Symfony\Component\Form\Exception\InvalidArgumentException;
use Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface; use Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface;
use Symfony\Component\Form\Extension\Core\View\ChoiceView; use Symfony\Component\Form\Extension\Core\View\ChoiceView;
use Symfony\Component\Form\Form;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\ResolvedFormTypeInterface;
use Symfony\Component\OptionsResolver\Exception\MissingOptionsException; use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\Form\Exception\FormException; use Symfony\Component\Form\Exception\FormException;
@ -87,25 +90,51 @@ class FormTypeParser implements ParserInterface
$form = $this->formFactory->create($type); $form = $this->formFactory->create($type);
return $this->parseForm($form, array_key_exists('name', $item) ? $item['name'] : $form->getName()); $name = array_key_exists('name', $item) ? $item['name'] : $form->getName();
$options = null;
if (empty($name)) {
return $this->parseForm($form);
} }
private function parseForm($form, $prefix = null) $subType = is_object($type) ? get_class($type) : $type;
if (class_exists($subType)) {
$parts = explode('\\', $subType);
$dataType = sprintf('object (%s)', end($parts));
} else {
$dataType = sprintf('object (%s)', $subType);
}
return array(
$name => array(
'required' => true,
'readonly' => false,
'description' => '',
'default' => null,
'dataType' => $dataType,
'actualType' => DataTypes::MODEL,
'subType' => $subType,
'children' => $this->parseForm($form),
),
);
}
private function parseForm($form)
{ {
$parameters = array(); $parameters = array();
foreach ($form as $name => $child) { foreach ($form as $name => $child) {
$config = $child->getConfig(); $config = $child->getConfig();
if ($prefix) {
$name = sprintf('%s[%s]', $prefix, $name);
}
$bestType = ''; $bestType = '';
$actualType = null; $actualType = null;
$subType = null; $subType = null;
$children = null;
for ($type = $config->getType(); null !== $type; $type = $type->getParent()) { for ($type = $config->getType();
$type instanceof FormInterface || $type instanceof ResolvedFormTypeInterface;
$type = $type->getParent()
) {
if (isset($this->mapTypes[$type->getName()])) { if (isset($this->mapTypes[$type->getName()])) {
$bestType = $this->mapTypes[$type->getName()]; $bestType = $this->mapTypes[$type->getName()];
$actualType = $bestType; $actualType = $bestType;
@ -116,10 +145,18 @@ class FormTypeParser implements ParserInterface
$bestType = sprintf('array of %ss', $subType); $bestType = sprintf('array of %ss', $subType);
} else { } else {
// Embedded form collection // Embedded form collection
$subParameters = $this->parseForm($this->formFactory->create($config->getOption('type'), null, $config->getOption('options', array())), $name . '[]'); $type = $config->getOption('type');
$parameters = array_merge($parameters, $subParameters); $subForm = $this->formFactory->create($type, null, $config->getOption('options', array()));
$children = $this->parseForm($subForm);
$actualType = DataTypes::COLLECTION;
$subType = is_object($type) ? get_class($type) : $type;
continue 2; if (class_exists($subType)) {
$parts = explode('\\', $subType);
$bestType = sprintf('array of objects (%s)', end($parts));
} else {
$bestType = sprintf('array of objects (%s)', $subType);
}
} }
} }
} }
@ -136,8 +173,25 @@ class FormTypeParser implements ParserInterface
try { try {
$subForm = $this->formFactory->create($type); $subForm = $this->formFactory->create($type);
$subParameters = $this->parseForm($subForm, $name); $subParameters = $this->parseForm($subForm, $name);
if (!empty($subParameters)) { if (!empty($subParameters)) {
$parameters = array_merge($parameters, $subParameters); $children = $subParameters;
$config = $subForm->getConfig();
$subType = get_class($type);
$parts = explode('\\', $subType);
$bestType = sprintf('object (%s)', end($parts));
$parameters[$name] = array(
'dataType' => $bestType,
'actualType' => DataTypes::MODEL,
'default' => null,
'subType' => $subType,
'required' => $config->getRequired(),
'description' => $config->getAttribute('description'),
'readonly' => $config->getDisabled(),
'children' => $children,
);
} else { } else {
$addDefault = true; $addDefault = true;
} }
@ -171,8 +225,12 @@ class FormTypeParser implements ParserInterface
'readonly' => $config->getDisabled(), 'readonly' => $config->getDisabled(),
); );
switch ($actualType) { if (null !== $children) {
case DataTypes::DATETIME: $parameters[$name]['children'] = $children;
}
switch ($bestType) {
case 'datetime':
if (($format = $config->getOption('date_format')) && is_string($format)) { if (($format = $config->getOption('date_format')) && is_string($format)) {
$parameters[$name]['format'] = $format; $parameters[$name]['format'] = $format;
} elseif ('single_text' == $config->getOption('widget') && $format = $config->getOption('format')) { } elseif ('single_text' == $config->getOption('widget') && $format = $config->getOption('format')) {
@ -180,13 +238,13 @@ class FormTypeParser implements ParserInterface
} }
break; break;
case DataTypes::DATE: case 'date':
if (($format = $config->getOption('format')) && is_string($format)) { if (($format = $config->getOption('format')) && is_string($format)) {
$parameters[$name]['format'] = $format; $parameters[$name]['format'] = $format;
} }
break; break;
case DataTypes::ENUM: case 'choice':
if ($config->getOption('multiple')) { if ($config->getOption('multiple')) {
$parameters[$name]['dataType'] = sprintf('array of %ss', $parameters[$name]['dataType']); $parameters[$name]['dataType'] = sprintf('array of %ss', $parameters[$name]['dataType']);
$parameters[$name]['actualType'] = DataTypes::COLLECTION; $parameters[$name]['actualType'] = DataTypes::COLLECTION;
@ -213,9 +271,10 @@ class FormTypeParser implements ParserInterface
if (!class_exists($item)) { if (!class_exists($item)) {
return false; return false;
} }
$refl = new \ReflectionClass($item); $refl = new \ReflectionClass($item);
return $refl->implementsInterface('Symfony\Component\Form\FormTypeInterface'); return $refl->implementsInterface('Symfony\Component\Form\FormTypeInterface') || $refl->implementsInterface('Symfony\Component\Form\ResolvedFormTypeInterface');
} }
private function getTypeInstance($type) private function getTypeInstance($type)
@ -230,6 +289,7 @@ class FormTypeParser implements ParserInterface
return $this->formFactory->create($type); return $this->formFactory->create($type);
} }
try { try {
return $this->formFactory->create($item); return $this->formFactory->create($item);
} catch (UnexpectedTypeException $e) { } catch (UnexpectedTypeException $e) {

View File

@ -133,6 +133,7 @@ class JmsMetadataParser implements ParserInterface
'actualType' => $dataType['actualType'], 'actualType' => $dataType['actualType'],
'subType' => $dataType['class'], 'subType' => $dataType['class'],
'required' => false, 'required' => false,
'default' => null,
//TODO: can't think of a good way to specify this one, JMS doesn't have a setting for this //TODO: can't think of a good way to specify this one, JMS doesn't have a setting for this
'description' => $this->getDescription($item), 'description' => $this->getDescription($item),
'readonly' => $item->readOnly, 'readonly' => $item->readOnly,

View File

@ -160,6 +160,7 @@ class ValidationParser implements ParserInterface, PostParserInterface
$vparams['actualType'] = DataTypes::STRING; $vparams['actualType'] = DataTypes::STRING;
$vparams['subType'] = null; $vparams['subType'] = null;
$vparams['default'] = null;
switch ($class) { switch ($class) {
case 'NotBlank': case 'NotBlank':

View File

@ -0,0 +1,32 @@
<?php
namespace Nelmio\ApiDocBundle\Tests\Fixtures\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
/**
* Class CompoundType
*
* @author Bez Hermoso <bez@activelamp.com>
*/
class CompoundType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('sub_form', new SimpleType())
->add('a', 'number')
;
}
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return '';
}
}

View File

@ -1,10 +1,4 @@
<?php <?php
/**
* Created by PhpStorm.
* User: Maxim_Romanovsky
* Date: 4/4/14
* Time: 11:00 AM
*/
namespace Nelmio\ApiDocBundle\Tests\Fixtures\Form; namespace Nelmio\ApiDocBundle\Tests\Fixtures\Form;

View File

@ -0,0 +1,38 @@
<?php
namespace Nelmio\ApiDocBundle\Tests\Fixtures\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
/**
* Class SimpleType
*
* @author Bez Hermoso <bez@activelamp.com>
*/
class SimpleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('a', 'text', array(
'description' => 'Something that describes A.',
))
->add('b', 'number')
->add('c', 'choice', array(
'choices' => array('x' => 'X', 'y' => 'Y', 'z' => 'Z'),
))
->add('d', 'datetime')
->add('e', 'date')
->add('g', 'textarea')
;
}
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'simple';
}
}

View File

@ -162,6 +162,11 @@ _create another test_
#### Parameters #### #### Parameters ####
dependency_type:
* type: object (dependency_type)
* required: true
dependency_type[a]: dependency_type[a]:
* type: string * type: string
@ -289,6 +294,10 @@ _Testing return_
#### Response #### #### Response ####
dependency_type:
* type: object (dependency_type)
dependency_type[a]: dependency_type[a]:
* type: string * type: string

View File

@ -227,8 +227,16 @@ class SimpleFormatterTest extends WebTestCase
'description' => 'create another test', 'description' => 'create another test',
'parameters' => 'parameters' =>
array( array(
'dependency_type[a]' => 'dependency_type' => array(
array( 'dataType' => 'object (dependency_type)',
'actualType' => DataTypes::MODEL,
'subType' => 'dependency_type',
'default' => null,
'required' => true,
'readonly' => false,
'description' => '',
'children' => array(
'a' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
@ -238,6 +246,8 @@ class SimpleFormatterTest extends WebTestCase
'readonly' => false, 'readonly' => false,
), ),
), ),
),
),
'https' => false, 'https' => false,
'authentication' => false, 'authentication' => false,
'authenticationRoles' => array(), 'authenticationRoles' => array(),
@ -293,6 +303,7 @@ class SimpleFormatterTest extends WebTestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -304,6 +315,7 @@ class SimpleFormatterTest extends WebTestCase
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => true, 'readonly' => true,
@ -315,6 +327,7 @@ class SimpleFormatterTest extends WebTestCase
'dataType' => 'double', 'dataType' => 'double',
'actualType' => DataTypes::FLOAT, 'actualType' => DataTypes::FLOAT,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -326,6 +339,7 @@ class SimpleFormatterTest extends WebTestCase
'dataType' => 'array', 'dataType' => 'array',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -337,6 +351,7 @@ class SimpleFormatterTest extends WebTestCase
'dataType' => 'object (JmsNested)', 'dataType' => 'object (JmsNested)',
'actualType' => DataTypes::MODEL, 'actualType' => DataTypes::MODEL,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -349,6 +364,7 @@ class SimpleFormatterTest extends WebTestCase
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => true, 'readonly' => true,
@ -360,6 +376,7 @@ class SimpleFormatterTest extends WebTestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -371,6 +388,7 @@ class SimpleFormatterTest extends WebTestCase
'dataType' => 'array of integers', 'dataType' => 'array of integers',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => DataTypes::INTEGER, 'subType' => DataTypes::INTEGER,
'default' => null,
'required' => false, 'required' => false,
'description' => 'Epic description. 'description' => 'Epic description.
@ -384,6 +402,7 @@ With multiple lines.',
'dataType' => 'object (JmsNested)', 'dataType' => 'object (JmsNested)',
'actualType' => DataTypes::MODEL, 'actualType' => DataTypes::MODEL,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -395,6 +414,7 @@ With multiple lines.',
'dataType' => 'object (JmsTest)', 'dataType' => 'object (JmsTest)',
'actualType' => DataTypes::MODEL, 'actualType' => DataTypes::MODEL,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsTest', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsTest',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -407,6 +427,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -418,6 +439,7 @@ With multiple lines.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => true, 'readonly' => true,
@ -429,6 +451,7 @@ With multiple lines.',
'dataType' => 'double', 'dataType' => 'double',
'actualType' => DataTypes::FLOAT, 'actualType' => DataTypes::FLOAT,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -440,6 +463,7 @@ With multiple lines.',
'dataType' => 'array', 'dataType' => 'array',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -451,6 +475,7 @@ With multiple lines.',
'dataType' => 'object (JmsNested)', 'dataType' => 'object (JmsNested)',
'actualType' => DataTypes::MODEL, 'actualType' => DataTypes::MODEL,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -462,6 +487,7 @@ With multiple lines.',
'dataType' => 'array of objects (JmsNested)', 'dataType' => 'array of objects (JmsNested)',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -475,6 +501,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -486,6 +513,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -497,6 +525,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -510,6 +539,7 @@ With multiple lines.',
'dataType' => 'array of objects (JmsNested)', 'dataType' => 'array of objects (JmsNested)',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -529,8 +559,16 @@ With multiple lines.',
'description' => 'Testing return', 'description' => 'Testing return',
'response' => 'response' =>
array( array(
'dependency_type[a]' => 'dependency_type' => array(
array( 'dataType' => 'object (dependency_type)',
'actualType' => DataTypes::MODEL,
'subType' => 'dependency_type',
'default' => null,
'required' => true,
'readonly' => false,
'description' => '',
'children' => array(
'a' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
@ -540,6 +578,8 @@ With multiple lines.',
'readonly' => false, 'readonly' => false,
), ),
), ),
),
),
'https' => false, 'https' => false,
'authentication' => false, 'authentication' => false,
'authenticationRoles' => array(), 'authenticationRoles' => array(),
@ -601,6 +641,7 @@ And, it supports multilines until the first \'@\' char.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -612,6 +653,7 @@ And, it supports multilines until the first \'@\' char.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => true, 'readonly' => true,
@ -623,6 +665,7 @@ And, it supports multilines until the first \'@\' char.',
'dataType' => 'double', 'dataType' => 'double',
'actualType' => DataTypes::FLOAT, 'actualType' => DataTypes::FLOAT,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -634,6 +677,7 @@ And, it supports multilines until the first \'@\' char.',
'dataType' => 'array', 'dataType' => 'array',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -645,6 +689,7 @@ And, it supports multilines until the first \'@\' char.',
'dataType' => 'object (JmsNested)', 'dataType' => 'object (JmsNested)',
'actualType' => DataTypes::MODEL, 'actualType' => DataTypes::MODEL,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -657,6 +702,7 @@ And, it supports multilines until the first \'@\' char.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => true, 'readonly' => true,
@ -668,6 +714,7 @@ And, it supports multilines until the first \'@\' char.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -679,6 +726,7 @@ And, it supports multilines until the first \'@\' char.',
'dataType' => 'array of integers', 'dataType' => 'array of integers',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => DataTypes::INTEGER, 'subType' => DataTypes::INTEGER,
'default' => null,
'required' => false, 'required' => false,
'description' => 'Epic description. 'description' => 'Epic description.
@ -692,6 +740,7 @@ With multiple lines.',
'dataType' => 'object (JmsNested)', 'dataType' => 'object (JmsNested)',
'actualType' => DataTypes::MODEL, 'actualType' => DataTypes::MODEL,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -703,6 +752,7 @@ With multiple lines.',
'dataType' => 'object (JmsTest)', 'dataType' => 'object (JmsTest)',
'actualType' => DataTypes::MODEL, 'actualType' => DataTypes::MODEL,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsTest', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsTest',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -715,6 +765,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -726,6 +777,7 @@ With multiple lines.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => true, 'readonly' => true,
@ -737,6 +789,7 @@ With multiple lines.',
'dataType' => 'double', 'dataType' => 'double',
'actualType' => DataTypes::FLOAT, 'actualType' => DataTypes::FLOAT,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -748,6 +801,7 @@ With multiple lines.',
'dataType' => 'array', 'dataType' => 'array',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -759,6 +813,7 @@ With multiple lines.',
'dataType' => 'object (JmsNested)', 'dataType' => 'object (JmsNested)',
'actualType' => DataTypes::MODEL, 'actualType' => DataTypes::MODEL,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -770,6 +825,7 @@ With multiple lines.',
'dataType' => 'array of objects (JmsNested)', 'dataType' => 'array of objects (JmsNested)',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -783,6 +839,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -794,6 +851,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -805,6 +863,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -818,6 +877,7 @@ With multiple lines.',
'dataType' => 'array of objects (JmsNested)', 'dataType' => 'array of objects (JmsNested)',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested',
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -969,6 +1029,7 @@ With multiple lines.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => null, 'required' => null,
'readonly' => null 'readonly' => null
), ),
@ -976,6 +1037,7 @@ With multiple lines.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -986,6 +1048,7 @@ With multiple lines.',
'dataType' => 'array of objects (Test)', 'dataType' => 'array of objects (Test)',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
'default' => null,
'readonly' => null, 'readonly' => null,
'required' => null, 'required' => null,
'children' => array( 'children' => array(
@ -993,6 +1056,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'format' => '{length: min: foo}, {not blank}', 'format' => '{length: min: foo}, {not blank}',
'required' => true, 'required' => true,
'readonly' => null 'readonly' => null
@ -1001,6 +1065,7 @@ With multiple lines.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => null, 'required' => null,
'readonly' => null 'readonly' => null
) )
@ -1050,6 +1115,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'default' => "DefaultTest", 'default' => "DefaultTest",
'required' => true, 'required' => true,
'description' => '', 'description' => '',
@ -1069,6 +1135,7 @@ With multiple lines.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => null, 'required' => null,
'readonly' => null 'readonly' => null
), ),
@ -1076,6 +1143,7 @@ With multiple lines.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
@ -1086,6 +1154,7 @@ With multiple lines.',
'dataType' => 'array of objects (Test)', 'dataType' => 'array of objects (Test)',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test', 'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
'default' => null,
'readonly' => null, 'readonly' => null,
'required' => null, 'required' => null,
'children' => array( 'children' => array(
@ -1093,6 +1162,7 @@ With multiple lines.',
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'format' => '{length: min: foo}, {not blank}', 'format' => '{length: min: foo}, {not blank}',
'required' => true, 'required' => true,
'readonly' => null 'readonly' => null
@ -1101,6 +1171,7 @@ With multiple lines.',
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => null, 'required' => null,
'readonly' => null 'readonly' => null
) )

View File

@ -58,10 +58,10 @@ class FormTypeParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'boolean', 'dataType' => 'boolean',
'actualType' => DataTypes::BOOLEAN, 'actualType' => DataTypes::BOOLEAN,
'subType' => null, 'subType' => null,
'default' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false, 'readonly' => false,
'default' => null
), ),
'd' => array( 'd' => array(
'dataType' => 'string', 'dataType' => 'string',
@ -77,52 +77,74 @@ class FormTypeParserTest extends \PHPUnit_Framework_TestCase
array( array(
array('class' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Form\CollectionType'), array('class' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Form\CollectionType'),
array( array(
'collection_type[a]' => array( 'collection_type' => array(
'dataType' => 'object (CollectionType)',
'actualType' => DataTypes::MODEL,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Form\CollectionType',
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
'children' => array(
'a' => array(
'dataType' => 'array of strings', 'dataType' => 'array of strings',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => DataTypes::STRING, 'subType' => DataTypes::STRING,
'default' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'default' => null, 'readonly' => false,
'readonly' => false
), ),
'collection_type[b][][a]' => array( 'b' => array(
'dataType' => 'array of objects (TestType)',
'actualType' => DataTypes::COLLECTION,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Form\TestType',
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
'children' => array(
'a' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'default' => null, 'default' => null,
'subType' => null, 'subType' => null,
'required' => true, 'required' => true,
'description' => 'A nice description', 'description' => 'A nice description',
'readonly' => false 'readonly' => false,
), ),
'collection_type[b][][b]' => array( 'b' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null,
'default' => null, 'default' => null,
'subType' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
), ),
'collection_type[b][][c]' => array( 'c' => array(
'dataType' => 'boolean', 'dataType' => 'boolean',
'actualType' => DataTypes::BOOLEAN, 'actualType' => DataTypes::BOOLEAN,
'default' => null,
'subType' => null, 'subType' => null,
'default' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
), ),
'collection_type[b][][d]' => array( 'd' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'default' => "DefaultTest",
'subType' => null, 'subType' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
) 'default' => "DefaultTest"
) ),
),
),
),
),
),
), ),
array( array(
array( array(
@ -133,49 +155,60 @@ class FormTypeParserTest extends \PHPUnit_Framework_TestCase
'a' => array( 'a' => array(
'dataType' => 'array of strings', 'dataType' => 'array of strings',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'default' => null,
'subType' => DataTypes::STRING, 'subType' => DataTypes::STRING,
'default' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
), ),
'b[][a]' => array( 'b' => array(
'dataType' => 'array of objects (TestType)',
'actualType' => DataTypes::COLLECTION,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Form\TestType',
'required' => true,
'description' => '',
'default' => null,
'readonly' => false,
'children' => array(
'a' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'default' => null,
'subType' => null, 'subType' => null,
'default' => null,
'required' => true, 'required' => true,
'description' => 'A nice description', 'description' => 'A nice description',
'readonly' => false 'readonly' => false,
), ),
'b[][b]' => array( 'b' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'default' => null,
'subType' => null, 'subType' => null,
'default' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
), ),
'b[][c]' => array( 'c' => array(
'dataType' => 'boolean', 'dataType' => 'boolean',
'actualType' => DataTypes::BOOLEAN, 'actualType' => DataTypes::BOOLEAN,
'default' => null,
'subType' => null, 'subType' => null,
'default' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
), ),
'b[][d]' => array( 'd' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => "DefaultTest",
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
) 'default' => "DefaultTest"
) ),
),
),
),
), ),
array( array(
array( array(
@ -190,36 +223,45 @@ class FormTypeParserTest extends \PHPUnit_Framework_TestCase
'default' => null, 'default' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
), ),
'b[][a]' => array( 'b' => array(
'dataType' => 'array of objects (TestType)',
'actualType' => DataTypes::COLLECTION,
'subType' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Form\TestType',
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
'children' => array(
'a' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null, 'default' => null,
'required' => true, 'required' => true,
'description' => 'A nice description', 'description' => 'A nice description',
'readonly' => false 'readonly' => false,
), ),
'b[][b]' => array( 'b' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null, 'default' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
), ),
'b[][c]' => array( 'c' => array(
'dataType' => 'boolean', 'dataType' => 'boolean',
'actualType' => DataTypes::BOOLEAN, 'actualType' => DataTypes::BOOLEAN,
'subType' => null, 'subType' => null,
'default' => null, 'default' => null,
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false,
), ),
'b[][d]' => array( 'd' => array(
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
@ -227,8 +269,10 @@ class FormTypeParserTest extends \PHPUnit_Framework_TestCase
'required' => true, 'required' => true,
'description' => '', 'description' => '',
'readonly' => false 'readonly' => false
) ),
) ),
),
),
), ),
array( array(
array('class' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Form\ImprovedTestType'), array('class' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Form\ImprovedTestType'),
@ -339,8 +383,97 @@ class FormTypeParserTest extends \PHPUnit_Framework_TestCase
'readonly' => false, 'readonly' => false,
'format' => json_encode(array('foo' => 'bar', 'baz' => 'Buzz')), 'format' => json_encode(array('foo' => 'bar', 'baz' => 'Buzz')),
), ),
)
), ),
),
array(
array('class' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Form\CompoundType'),
array (
'sub_form' =>
array (
'dataType' => 'object (SimpleType)',
'actualType' => 'model',
'subType' => 'Nelmio\\ApiDocBundle\\Tests\\Fixtures\\Form\\SimpleType',
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
'children' =>
array (
'a' =>
array (
'dataType' => 'string',
'actualType' => 'string',
'subType' => NULL,
'default' => null,
'required' => true,
'description' => 'Something that describes A.',
'readonly' => false,
),
'b' =>
array (
'dataType' => 'float',
'actualType' => 'float',
'subType' => NULL,
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
),
'c' =>
array (
'dataType' => 'choice',
'actualType' => 'choice',
'subType' => NULL,
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
'format' => '{"x":"X","y":"Y","z":"Z"}',
),
'd' =>
array (
'dataType' => 'datetime',
'actualType' => 'datetime',
'subType' => NULL,
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
),
'e' =>
array (
'dataType' => 'date',
'actualType' => 'date',
'subType' => NULL,
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
),
'g' =>
array (
'dataType' => 'string',
'actualType' => 'string',
'subType' => NULL,
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
),
),
),
'a' =>
array (
'dataType' => 'float',
'actualType' => 'float',
'subType' => NULL,
'default' => null,
'required' => true,
'description' => '',
'readonly' => false,
),
),
)
); );
} }
} }

View File

@ -85,6 +85,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'DateTime', 'dataType' => 'DateTime',
'actualType' => DataTypes::DATETIME, 'actualType' => DataTypes::DATETIME,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -95,6 +96,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -105,6 +107,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'array of integers', 'dataType' => 'array of integers',
'actualType' => DataTypes::COLLECTION, 'actualType' => DataTypes::COLLECTION,
'subType' => DataTypes::INTEGER, 'subType' => DataTypes::INTEGER,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -164,6 +167,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -174,6 +178,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -184,6 +189,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -208,6 +214,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -218,6 +225,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -242,6 +250,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -252,6 +261,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -276,6 +286,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -286,6 +297,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -296,6 +308,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -355,6 +368,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -365,6 +379,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,
@ -375,6 +390,7 @@ class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
'dataType' => 'string', 'dataType' => 'string',
'actualType' => DataTypes::STRING, 'actualType' => DataTypes::STRING,
'subType' => null, 'subType' => null,
'default' => null,
'required' => false, 'required' => false,
'description' => null, 'description' => null,
'readonly' => false, 'readonly' => false,