Coverage for test\test_charset.py: 100%

19 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-09-28 16:41 +0000

1from Charset import to_utf8 

2 

3import Configuration 

4import pytest 

5 

6""" 

7Code Analysis 

8 

9Objective: 

10- The objective of the function is to convert a string to UTF-8 encoding. 

11 

12Inputs: 

13- s (str): The string to convert. 

14 

15Flow: 

16- If not_needed1 is true, return the original string. 

17- Attempt to decode the string using the locale encoding and then encode it in UTF-8. 

18- If the string cannot be decoded using the locale encoding of the system, raise a UnicodeDecodeError. 

19- If the string cannot be encoded using UTF-8 encoding, raise a UnicodeEncodeError. 

20- If we give unicode() an already encoded string, return the original string. 

21 

22Outputs: 

23- str: The converted string in UTF-8 encoding. 

24 

25Additional aspects: 

26- The function uses the LOCALE_ENCODING constant from the Configuration module to decode the string. 

27- The function raises exceptions if the string cannot be decoded or encoded properly. 

28- The function may return the original string if not_needed1 is true. 

29""" 

30class TestToUtf8: 

31 # Tests that an empty string is returned as is 

32 def test_empty_string(self): 

33 assert to_utf8('') == '' 

34 

35 # Tests that an ASCII string is converted to UTF-8 encoding 

36 def test_ascii_string(self): 

37 assert to_utf8('hello') == 'hello' 

38 

39 # Tests that a string with invalid characters for the locale encoding raises a UnicodeDecodeError 

40 def test_invalid_locale_encoding(self): 

41 with pytest.raises(TypeError): 

42 to_utf8(b'\x80\x81\x82') 

43 

44 # Tests that an already encoded string is returned as is 

45 def test_already_encoded_string(self): 

46 assert to_utf8(b'hello') == b'hello' 

47 

48 # Tests that the function works with different locale encodings 

49 # Tests that the function works with different locale encodings 

50 def test_different_locale_encoding(self): 

51 old_locale_encoding = Configuration.LOCALE_ENCODING 

52 Configuration.LOCALE_ENCODING = 'ISO-8859-1' 

53 assert to_utf8('héllo'.encode('ISO-8859-1')) == b'h\xc3\xa9llo' 

54 Configuration.LOCALE_ENCODING = old_locale_encoding