Skip to content

Commit d1f4cb2

Browse files
committed
bug #21400 [Serializer] fix upper camel case conversion (see #21399) (markusu49)
This PR was merged into the 2.7 branch. Discussion ---------- [Serializer] fix upper camel case conversion (see #21399) | Q | A | ------------- | --- | Branch? | 2.7 | Bug fix? | yes | New feature? | no | BC breaks? | ? | Deprecations? | no | Tests pass? | yes | Fixed tickets | #21399 | License | MIT Improve upper camel case support of CamelCaseToSnakeCaseConverter (`ThisIsATest` now converts to `this_is_a_test` instead of `_this_is_a_test`). Commits ------- 81e771c [Serializer] fix upper camel case conversion (see #21399)
2 parents be854e1 + 81e771c commit d1f4cb2

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

src/Symfony/Component/Serializer/NameConverter/CamelCaseToSnakeCaseNameConverter.php

+5-4
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,15 @@ public function __construct(array $attributes = null, $lowerCamelCase = true)
4444
public function normalize($propertyName)
4545
{
4646
if (null === $this->attributes || in_array($propertyName, $this->attributes)) {
47+
$lcPropertyName = lcfirst($propertyName);
4748
$snakeCasedName = '';
4849

49-
$len = strlen($propertyName);
50+
$len = strlen($lcPropertyName);
5051
for ($i = 0; $i < $len; ++$i) {
51-
if (ctype_upper($propertyName[$i])) {
52-
$snakeCasedName .= '_'.strtolower($propertyName[$i]);
52+
if (ctype_upper($lcPropertyName[$i])) {
53+
$snakeCasedName .= '_'.strtolower($lcPropertyName[$i]);
5354
} else {
54-
$snakeCasedName .= strtolower($propertyName[$i]);
55+
$snakeCasedName .= strtolower($lcPropertyName[$i]);
5556
}
5657
}
5758

src/Symfony/Component/Serializer/Tests/NameConverter/CamelCaseToSnakeCaseNameConverterTest.php

+12-9
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,30 @@ public function testInterface()
2727
/**
2828
* @dataProvider attributeProvider
2929
*/
30-
public function testNormalize($underscored, $lowerCamelCased)
30+
public function testNormalize($underscored, $camelCased, $useLowerCamelCase)
3131
{
32-
$nameConverter = new CamelCaseToSnakeCaseNameConverter();
33-
$this->assertEquals($nameConverter->normalize($lowerCamelCased), $underscored);
32+
$nameConverter = new CamelCaseToSnakeCaseNameConverter(null, $useLowerCamelCase);
33+
$this->assertEquals($nameConverter->normalize($camelCased), $underscored);
3434
}
3535

3636
/**
3737
* @dataProvider attributeProvider
3838
*/
39-
public function testDenormalize($underscored, $lowerCamelCased)
39+
public function testDenormalize($underscored, $camelCased, $useLowerCamelCase)
4040
{
41-
$nameConverter = new CamelCaseToSnakeCaseNameConverter();
42-
$this->assertEquals($nameConverter->denormalize($underscored), $lowerCamelCased);
41+
$nameConverter = new CamelCaseToSnakeCaseNameConverter(null, $useLowerCamelCase);
42+
$this->assertEquals($nameConverter->denormalize($underscored), $camelCased);
4343
}
4444

4545
public function attributeProvider()
4646
{
4747
return array(
48-
array('coop_tilleuls', 'coopTilleuls'),
49-
array('_kevin_dunglas', '_kevinDunglas'),
50-
array('this_is_a_test', 'thisIsATest'),
48+
array('coop_tilleuls', 'coopTilleuls', true),
49+
array('_kevin_dunglas', '_kevinDunglas', true),
50+
array('this_is_a_test', 'thisIsATest', true),
51+
array('coop_tilleuls', 'CoopTilleuls', false),
52+
array('_kevin_dunglas', '_kevinDunglas', false),
53+
array('this_is_a_test', 'ThisIsATest', false),
5154
);
5255
}
5356
}

0 commit comments

Comments
 (0)