When generating API stubs with the scaffold utility using, e.g., `python -m localstack.aws.scaffold sns`,
the scaffold creates method names from operation names, which are ugly when acronyms (subsequent uppercase characters that belong together).

Example:
`CreateSMSSandboxPhoneNumber` -> `create_s_m_s_sandbox_phone_number`

it would be nicer to have `create_sms_sandbox_phone_number`

This is a limitation of this method: https://github.com/localstack/localstack/blob/1888e66b85d7e6a8ee457bc7a732984fcf7aa830/localstack/utils/common.py#L978-L979
fn = common.snake_to_camel_case
        self.assertEqual("Foo", fn("foo"))
        self.assertEqual("FoobarEd", fn("foobar_ed"))
        self.assertEqual("FooBarEd", fn("foo_bar_ed"))
        self.assertEqual("FooBar", fn("foo_bar"))
        self.assertEqual("FooBar", fn("foo__bar"))
        self.assertEqual("FooBAR", fn("foo_b_a_r"))
    def test_obj_to_xml(self):
        fn = common.obj_to_xml
        
        self.assertEqual("42", fn(42))
        self.assertEqual("False", fn(False))
        self.assertEqual("a", fn("a"))
        
        self.assertEqual("<foo>bar</foo>", fn({"foo": "bar"}))
        self.assertEqual("<a>42</a>", fn({"a": 42}))
        self.assertEqual("<a>42</a><foo>bar</foo>", fn({"a": 42, "foo": "bar"}))
        
        self.assertEqual("<a>42</a><a>43</a>", fn([{"a": 42}, {"a": 43}]))
        
        self.assertEqual("<f><a>42</a><a>43</a></f>", fn({"f": [{"a": 42}, {"a": 43}]}))
        
        self.assertEqual("None", fn(None))
        self.assertEqual("", fn(""))
    def test_parse_json_or_yaml_with_json(self):