diff --git a/insights/client/apps/ansible/playbook_verifier/serializer.py b/insights/client/apps/ansible/playbook_verifier/serializer.py index 12daafe5a..93b942940 100644 --- a/insights/client/apps/ansible/playbook_verifier/serializer.py +++ b/insights/client/apps/ansible/playbook_verifier/serializer.py @@ -57,6 +57,7 @@ def _str(cls, value): "\\": "\\\\", "\n": "\\n", "\t": "\\t", + "\u200d": "\\u200d", # Zero-width joiner } escaped_string = "" for char in value: diff --git a/insights/tests/client/apps/test_playbook_verifier.py b/insights/tests/client/apps/test_playbook_verifier.py index 2a3088377..8a9195556 100644 --- a/insights/tests/client/apps/test_playbook_verifier.py +++ b/insights/tests/client/apps/test_playbook_verifier.py @@ -379,6 +379,15 @@ def test_strings(self, source, expected): result = playbook_verifier.PlaybookSerializer.serialize(source) assert result == expected + def test_strings_emoji_zwj(self): + if sys.version_info < (3, 0): + raise pytest.skip("Unicode characters are not supported on Python 2 systems") + + source = "👨🏼‍🚀" + result = playbook_verifier.PlaybookSerializer.serialize(source) + expected = "'👨🏼\\u200d🚀'" + assert result == expected + class TestSerializePlaybookSnippet: def test_serialize_dictionary(self): @@ -429,8 +438,6 @@ def test_small(self): def test_real(self, filename): if filename == "unicode" and sys.version_info < (3, 0): raise pytest.skip("Playbooks containing unicode are not supported in Python 2 systems") - if filename == "unicode" and sys.version_info >= (3, 12): - raise pytest.xfail("Known RFE in Unicode serialization.") parent = os.path.dirname(__file__) # type: str with open("{parent}/playbooks/{filename}.yml".format(parent=parent, filename=filename), "r") as f: