Unified data types [actualType and subType]

Updated tests.

JMS parsing fixes; updated {Validator,FormType}Parser, FOSRestHandler, and AbstractFormatter, and updated DataTypes enum.

Modified dataType checking.

Updated tests.

Updated DataTypes enum.

Quick fix and added doc comments.

CS fixes.

Refactored FormTypeParser to produce nested parameters. Updated tests accordingly.

Logical and CS fixes.

Sub-forms and more tests.

Ignore data_class and always use form-type to avoid conflicts.

Quick fix.
This commit is contained in:
Bez Hermoso 2014-06-17 17:05:00 -07:00 committed by William DURAND
parent a2a4782af5
commit 3a31c93c94
11 changed files with 542 additions and 187 deletions

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,