Skip to content

Commit

Permalink
Merge branch 'DDC-2172' into 2.3
Browse files Browse the repository at this point in the history
  • Loading branch information
beberlei committed Nov 27, 2012
2 parents a3fea32 + 6e7e4dd commit f75c3b5
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 48 deletions.
110 changes: 62 additions & 48 deletions lib/Doctrine/ORM/Tools/EntityGenerator.php
Expand Up @@ -157,6 +157,38 @@ class EntityGenerator
Type::SIMPLE_ARRAY => 'array',
);

/**
* @var array Hash-map to handle generator types string.
*/
protected static $generatorStrategyMap = array(
ClassMetadataInfo::GENERATOR_TYPE_AUTO => 'AUTO',
ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE => 'SEQUENCE',
ClassMetadataInfo::GENERATOR_TYPE_TABLE => 'TABLE',
ClassMetadataInfo::GENERATOR_TYPE_IDENTITY => 'IDENTITY',
ClassMetadataInfo::GENERATOR_TYPE_NONE => 'NONE',
ClassMetadataInfo::GENERATOR_TYPE_UUID => 'UUID',
ClassMetadataInfo::GENERATOR_TYPE_CUSTOM => 'CUSTOM'
);

/**
* @var array Hash-map to handle the change tracking policy string.
*/
protected static $changeTrackingPolicyMap = array(
ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT => 'DEFERRED_IMPLICIT',
ClassMetadataInfo::CHANGETRACKING_DEFERRED_EXPLICIT => 'DEFERRED_EXPLICIT',
ClassMetadataInfo::CHANGETRACKING_NOTIFY => 'NOTIFY',
);

/**
* @var array Hash-map to handle the inheritance type string.
*/
protected static $inheritanceTypeMap = array(
ClassMetadataInfo::INHERITANCE_TYPE_NONE => 'NONE',
ClassMetadataInfo::INHERITANCE_TYPE_JOINED => 'JOINED',
ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE => 'SINGLE_TABLE',
ClassMetadataInfo::INHERITANCE_TYPE_TABLE_PER_CLASS => 'TABLE_PER_CLASS',
);

/**
* @var string
*/
Expand Down Expand Up @@ -1214,63 +1246,45 @@ private function prefixCodeWithSpaces($code, $num = 1)
return implode("\n", $lines);
}

private function getInheritanceTypeString($type)
/**
* @param integer $type The inheritance type used by the class and it's subclasses.
* @return string The literal string for the inheritance type.
* @throws \InvalidArgumentException When the inheritance type does not exists.
*/
protected function getInheritanceTypeString($type)
{
switch ($type) {
case ClassMetadataInfo::INHERITANCE_TYPE_NONE:
return 'NONE';

case ClassMetadataInfo::INHERITANCE_TYPE_JOINED:
return 'JOINED';

case ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE:
return 'SINGLE_TABLE';

case ClassMetadataInfo::INHERITANCE_TYPE_TABLE_PER_CLASS:
return 'PER_CLASS';

default:
throw new \InvalidArgumentException('Invalid provided InheritanceType: ' . $type);
if ( ! isset(self::$inheritanceTypeMap[$type])) {
throw new \InvalidArgumentException(sprintf('Invalid provided InheritanceType: %s', $type));
}

return self::$inheritanceTypeMap[$type];
}

private function getChangeTrackingPolicyString($policy)
/**
* @param integer $type The policy used for change-tracking for the mapped class.
* @return string The literal string for the change-tracking type.
* @throws \InvalidArgumentException When the change-tracking type does not exists.
*/
protected function getChangeTrackingPolicyString($type)
{
switch ($policy) {
case ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT:
return 'DEFERRED_IMPLICIT';

case ClassMetadataInfo::CHANGETRACKING_DEFERRED_EXPLICIT:
return 'DEFERRED_EXPLICIT';

case ClassMetadataInfo::CHANGETRACKING_NOTIFY:
return 'NOTIFY';

default:
throw new \InvalidArgumentException('Invalid provided ChangeTrackingPolicy: ' . $policy);
if ( ! isset(self::$changeTrackingPolicyMap[$type])) {
throw new \InvalidArgumentException(sprintf('Invalid provided ChangeTrackingPolicy: %s', $type));
}

return self::$changeTrackingPolicyMap[$type];
}

private function getIdGeneratorTypeString($type)
/**
* @param integer $type The generator to use for the mapped class.
* @return string The literal string for the generetor type.
* @throws \InvalidArgumentException When the generator type does not exists.
*/
protected function getIdGeneratorTypeString($type)
{
switch ($type) {
case ClassMetadataInfo::GENERATOR_TYPE_AUTO:
return 'AUTO';

case ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE:
return 'SEQUENCE';

case ClassMetadataInfo::GENERATOR_TYPE_TABLE:
return 'TABLE';

case ClassMetadataInfo::GENERATOR_TYPE_IDENTITY:
return 'IDENTITY';

case ClassMetadataInfo::GENERATOR_TYPE_NONE:
return 'NONE';

default:
throw new \InvalidArgumentException('Invalid provided IdGeneratorType: ' . $type);
if ( ! isset(self::$generatorStrategyMap[$type])) {
throw new \InvalidArgumentException(sprintf('Invalid provided IdGeneratorType: %s', $type));
}

return self::$generatorStrategyMap[$type];
}
}
81 changes: 81 additions & 0 deletions tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php
Expand Up @@ -340,6 +340,87 @@ public function testGenerateEntityWithMultipleInverseJoinColumns()

}

/**
* @group DDC-2172
*/
public function testGetInheritanceTypeString()
{
$reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata');
$method = new \ReflectionMethod($this->_generator, 'getInheritanceTypeString');
$constants = $reflection->getConstants();
$pattern = '/^INHERITANCE_TYPE_/';

$method->setAccessible(true);

foreach ($constants as $name => $value) {
if( ! preg_match($pattern, $name)) {
continue;
}

$expected = preg_replace($pattern, '', $name);
$actual = $method->invoke($this->_generator, $value);

$this->assertEquals($expected, $actual);
}

$this->setExpectedException('\InvalidArgumentException', 'Invalid provided InheritanceType: INVALID');
$method->invoke($this->_generator, 'INVALID');
}

/**
* @group DDC-2172
*/
public function testGetChangeTrackingPolicyString()
{
$reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata');
$method = new \ReflectionMethod($this->_generator, 'getChangeTrackingPolicyString');
$constants = $reflection->getConstants();
$pattern = '/^CHANGETRACKING_/';

$method->setAccessible(true);

foreach ($constants as $name => $value) {
if( ! preg_match($pattern, $name)) {
continue;
}

$expected = preg_replace($pattern, '', $name);
$actual = $method->invoke($this->_generator, $value);

$this->assertEquals($expected, $actual);
}

$this->setExpectedException('\InvalidArgumentException', 'Invalid provided ChangeTrackingPolicy: INVALID');
$method->invoke($this->_generator, 'INVALID');
}

/**
* @group DDC-2172
*/
public function testGetIdGeneratorTypeString()
{
$reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata');
$method = new \ReflectionMethod($this->_generator, 'getIdGeneratorTypeString');
$constants = $reflection->getConstants();
$pattern = '/^GENERATOR_TYPE_/';

$method->setAccessible(true);

foreach ($constants as $name => $value) {
if( ! preg_match($pattern, $name)) {
continue;
}

$expected = preg_replace($pattern, '', $name);
$actual = $method->invoke($this->_generator, $value);

$this->assertEquals($expected, $actual);
}

$this->setExpectedException('\InvalidArgumentException', 'Invalid provided IdGeneratorType: INVALID');
$method->invoke($this->_generator, 'INVALID');
}

/**
* @dataProvider getEntityTypeAliasDataProvider
*
Expand Down

0 comments on commit f75c3b5

Please sign in to comment.