Skip to content

Commit

Permalink
Improve interface generator handling of multiple upper case letters
Browse files Browse the repository at this point in the history
Instead of converting `ACTIVATE_CONNECTION` to
`a_c_t_i_v_a_t_e__c_o_n_n_e_c_t_i_o_n` convert it to
`activate_connection`.
  • Loading branch information
igo95862 committed Mar 18, 2023
1 parent cc5b60f commit ae7bda2
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
11 changes: 9 additions & 2 deletions src/sdbus/interface_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,21 +46,28 @@ def _camel_case_to_snake_case_generator(camel: str) -> Iterator[str]:

yield first_char.lower()

last_character = first_char

# Yield every character
# if upper is encountered
# yield _ and lower
# yield _ only if previous character
# was not already uppercase or underscore
while True:
try:
c = next(i)
except StopIteration:
return

if c.isupper():
yield '_'
if not last_character.isupper() and not last_character == "_":
yield '_'

yield c.lower()
else:
yield c

last_character = c


def camel_case_to_snake_case(camel: str) -> str:
return ''.join(_camel_case_to_snake_case_generator(camel))
Expand Down
21 changes: 17 additions & 4 deletions test/test_interface_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,23 @@

class TestConverter(TestCase):
def test_camel_to_snake(self) -> None:
self.assertEqual(
'activate_connection',
camel_case_to_snake_case('ActivateConnection'),
)
with self.subTest("CamelCase"):
self.assertEqual(
'activate_connection',
camel_case_to_snake_case('ActivateConnection'),
)

with self.subTest("Already snake case"):
self.assertEqual(
'activate_connection',
camel_case_to_snake_case('activate_connection'),
)

with self.subTest("Upper snake case"):
self.assertEqual(
'activate_connection',
camel_case_to_snake_case('ACTIVATE_CONNECTION'),
)

def test_interface_name_to_class(self) -> None:
self.assertEqual(
Expand Down

0 comments on commit ae7bda2

Please sign in to comment.